九、PL/SQL之本地动态SQL


前言

程序运行时才能确定的SQL语句如SQL语句所使用的表和数据列也不是预先知道的或者用户所需的数据排序和分组方式,以构建各种报告…,由于SQL语句是动态产生的,所以被称为动态的。


一、EXECUTE IMMEDIATE

动态SQL语句:
‘SELECT first_name, last_name FROM stu WHERE stuid = :stu_id’
无法预先知道需要查询学生ID的值,需要使用绑定参数 :stu_id来实现指定。绑定参数是未声明标识符的占位符,名称的前缀是冒号。PL/SQL不会区分如下两个语句
‘SELECT first_name, last_name FROM stu WHERE stuid = :stu_id’
‘SELECT first_name, last_name FROM stu WHERE stuid = :id’

为处理动态SQL语句,需要使用EXECUTE IMMEDIATE,或者OPEN-FOR、FETCH和CLOSE语句。EXECUTE IMMEDIATE被用于单行SELECT语句、所有的DML语句和DDL语句。OPEN-FOR、FETCH和CLOSE语句用于多行SELECT语句以及引用游标。

1.1 EXECUTE IMMEDIATE语句

语法如下:
EXECUTE IMMEDIATE dynamic_sql_string
[INTO defined_variable1, defined_variable2, …]
[USING [in|out|in out] bind_argument1, bind_argument2,…]
[{RETURNING|RETURN} field1, field2, … INTO bind_argument1, bind_argument2, …]

DECLARE
    sql_stmt    VARCHAR2(1000);
    plsql_block  VARCHAR2(1000);
    v_ooag011 ooag_t.ooag011%TYPE;
    v_total_ooag NUMBER;
    v_new_ooag011 ooag_t.ooag011%TYPE;
    v_ooag001 ooag_t.ooag001%TYPE := '00261' ;
BEGIN
    --用法一:
    sql_stmt := 'CREATE TABLE ooag_t_bak' ||
                ' AS SELECT ooag001,ooag011 FROM ooag_t WHERE ooagent = 70 ' ||
                ' AND ooag001 = ' || v_ooag001;
    EXECUTE IMMEDIATE sql_stmt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永恒的宁静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值