• 学习笔记-静态SQL和动态SQL


    一:静态SQL 

        在编写pl/sql程序的时候,sql语句已经编写好了(编译时确定)

       ddl和会话控制语句不能在pl/sql中直接使用

    二:动态SQL

        在编写pl/sql程序的时候,sql语句还不确定

        不编译,执行时动态确定

        需要根据用户输入参数动态确定SQL语句

        解决pl/sql中不支持ddl语句的问题

    动态SQL语法:

       EXECUTE  IMMEDIATE  ‘DDL,DML语句’  ---sql语句是字符串的形式,sql语句中若有参数,可以:参数名使用

       [INTO 〈变量序列〉]       --用于接受select语句选择的记录值

       [USING 〈参数序列〉];    --用于绑定输入参数变量

    - -  EXECUTE  IMMEDIATE语句只能执行返回一行,或者没有的sql语句

          需要执行返回多行的sql语句时,可以使用ref动态游标

    动态创建返回多行的sql语句

    语法:

       声明跟普通ref游标一样,只是打开时不同

       OPEN  ref游标名 FOR  ‘sql语句字符串’  

       [ USING 〈参数列〉];

    示例----动态SQL-------------------------------

    DECLARE
    v_id NUMBER := &vid;
    v_name VARCHAR2(20) := '&vname';
    v_sex VARCHAR2(20) := '&sex';
    insert_sql VARCHAR2(200) := 'insert into student values(:1,:2,:3)';      ---:1为绑定变量,是动态SQL中的一个占位符
    BEGIN
    EXECUTE IMMEDIATE insert_sql USING v_id,v_name,v_sex;    ----EXECUTE IMMEDIATE后面可以直接加‘字符串sql语句’
    END;

    示例2----------ref动态游标---------

    DECLARE
    TYPE ref_cur IS REF CURSOR;
    rc ref_cur;
    emp_row dept%ROWTYPE;
    select_sql VARCHAR2(200) := 'select * from dept';
    BEGIN
    OPEN rc FOR select_sql;
    LOOP
    FETCH rc INTO emp_row;
    EXIT WHEN rc%NOTFOUND;
    --dbms_output.put_line(rc%ROWCOUNT||' '||emp_row.empno||' '||emp_row.ename||' '||emp_row.sal);
    dbms_output.put_line(emp_row.deptno||emp_row.dname);
    END LOOP;
    CLOSE rc;
    END;

  • 相关阅读:
    免费下载小说
    前段博客云库网
    node发送邮件
    node 发送短信
    node生成uuid
    node 控制台颜色
    OfficeCommandbarDesigner20170202.rar
    OfficeCommandbarViewer20171005.rar
    VB.Net 正则表达式测试器
    Windows_Management_Instrumentation
  • 原文地址:https://www.cnblogs.com/hjiongjiong/p/4217613.html
Copyright © 2020-2023  润新知