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)
即CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作;
DDL操作是隐性提交的,不能rollback;
例如:
sql_states := 'create table pid '||


1016

被折叠的 条评论
为什么被折叠?



