PL/SQL模块学习之十八:PL/SQL中的SQL

1.动态SQL

1.1有效的SQL语句

实际中,使用动态SQL创建中间表,将数据汇总到·中间表后执行逻辑运算,再删除这张表。

这里的实例是创建表后读取数据并打印出来,最后删除数据。

SQL> l
  1  declare
  2      sql_states varchar2(5000);
  3     counter number;
  4  begin
  5     sql_states :='create table pid '||
  6             'as select object_id,object_name from dba_objects where rownum<11';
  7     execute immediate sql_states;
  8     execute immediate 'select count(distinct(object_id)) from pid '
  9             into counter;
 10     dbms_output.put_line('counter is '||counter);
 11* end;
 SQL> /
counter is 10

1.2 SQL语句块

  • 语句块直接的连接用||符号; -注意换行时是否需要 空格来分隔字符,不然SQL执行语句将报错ORA-00933:SQL命令未正确结束

示例:

SQL> l
  1  declare
  2     obj_id number :=28;
  3  obj_name varchar2(20);
  4  plsql_blk varchar2(200);
  5  begin
  6     plsql_blk := ' declare var_date date;'  ||
  7              'begin ' || #注意begin后没有;结尾,注意加上空格分隔语句
  8             'select sysdate into var_date from dual;' ||
  9             'dbms_output.put_line(var_date); '||
 10              'end;';
 11     execute immediate plsql_blk;
 12* end;
SQL> /
24-3-20

1.3 USING和RETURNING INTO子句

动态的输入输出SQL语句操作的数据时

  • 使用using子句向动态SQL语句传递数据
  • 使用returning子句将值传递到into的变量中
SQL> l
  1  declare obj_id number := 28;
  2
  3  obj_name varchar2(20);
  4
  5  name varchar2(20) := 'mark';
  6
  7  sql_states varchar2(200);
  8 #动态SQL语句包含三个绑定变量 
  	# “:x” 对应设置的新的object_name的值
  	# “:y” 绑定要修改的object_id 
  	# “:z”绑定更新后的值到某个具体变量
  9   begin sql_states := 'update pid set object_name = :x where object_id = :y ' ||
 10                       'returning object_name into :z';
 11 # 使用using子句按照顺序向SQL语句传递给绑定变量“:x”和 “:y” 
    # 再到具体变量object_name、object_name
    # 使用returning into 子句将更新后的object_name值传递给obj_name变量
 12  execute immediate sql_states using name,
 13  obj_id returning into obj_name;
 14
 15  dbms_output.put_line('obj_name is ' || obj_name);
 16
 17  end;
 18*
SQL> /
obj_name is mark

PL/SQL 过程已成功完成。

1.4 EXECUTE IMMEDIATE

1.4.1 动态SQL语句结构
EXECUTE IMMEDIATE 动态SQL语句
[ INTO variable1,variable2...]
[USING [ IN | OUT | IN OUT]绑定参数1,绑定参数2...]
[{RETURNING | RETURN } 属性值1,属性值2... into 绑定参数1,绑定参数2...]
1.4.2 DDL语句不能使用绑定变量
  • 数据库模式定义语言DDL(Data Definition Language)
    CREATEALTERDROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作;
    DDL操作是隐性提交的,不能rollback;

例如:

sql_states := 'create table pid '||
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值