动态执行sql语句
2009-12-26 19:09
302 查看
execute immediate 语法
后面跟上sql语句可以动态执行sql语句.
使用场景:
(1)加入动态表.比如你有一张表的名字不明确,是需要判断得到的,则可以使用该语法来生成sql语句.
(2)加入动态字段.你根据判断,最终会加入同一张表,但是这张表根据不同的判断字段会有所不同,此时如果直接写sql是加不进去的,必须使用动态sql语句,让oracle编译时不判断字段是否与表匹配,这样的话才能动态加入字段.
例:
execute immediate 'insert into po_p_downloaddesc_' || table_languages(1) || '( contentid ) values(''' || s_contentid || ''')';
PS:要注意的地方.
(1)加入字段时,生成以后的sql语句要与非动态sql语句一模一样,也就是说,如果sql语句中有''的,那么在动态中也必须拼接''.
例如:
静态sql:insert into page values('123');
动态sql:execute immediate 'insert into page values(' ''123'' )';
中间俩个''123''最后生成'123'.语静态一样才可以插入,不然报错.
复合表类型如果是建一个类型的话
create or replace type type_table is table of varchar2(100);
那么在存储过程或函数或程序块中调用时必须初始化.
declare
table_languages type_table := type_table();
begin
table_languages.extend(2);
--上面为复合表table_languages申明了2个空间,这样只有1和2可以用,3的话就会抛出越界
end;
后面跟上sql语句可以动态执行sql语句.
使用场景:
(1)加入动态表.比如你有一张表的名字不明确,是需要判断得到的,则可以使用该语法来生成sql语句.
(2)加入动态字段.你根据判断,最终会加入同一张表,但是这张表根据不同的判断字段会有所不同,此时如果直接写sql是加不进去的,必须使用动态sql语句,让oracle编译时不判断字段是否与表匹配,这样的话才能动态加入字段.
例:
execute immediate 'insert into po_p_downloaddesc_' || table_languages(1) || '( contentid ) values(''' || s_contentid || ''')';
PS:要注意的地方.
(1)加入字段时,生成以后的sql语句要与非动态sql语句一模一样,也就是说,如果sql语句中有''的,那么在动态中也必须拼接''.
例如:
静态sql:insert into page values('123');
动态sql:execute immediate 'insert into page values(' ''123'' )';
中间俩个''123''最后生成'123'.语静态一样才可以插入,不然报错.
复合表类型如果是建一个类型的话
create or replace type type_table is table of varchar2(100);
那么在存储过程或函数或程序块中调用时必须初始化.
declare
table_languages type_table := type_table();
begin
table_languages.extend(2);
--上面为复合表table_languages申明了2个空间,这样只有1和2可以用,3的话就会抛出越界
end;
相关文章推荐
- oracle用存储过程 进行行转列(执行动态SQL语句)
- mysql存储过程中根据传入参数,动态拼sql语句并且执行
- mysql执行动态sql语句
- 使用Oracle的DBMS_SQL包执行动态SQL语句
- ORACLE 动态执行SQL语句
- 在Sql中执行动态Sql语句
- 动态执行Sql语句与临时表的问题(对象名无效)
- sqlserver 存储过程中拼接sql语句 动态执行
- 动态执行SQL语句
- 存储过程中执行动态Sql语句
- 动态生成并执行SQL语句
- MySQL 存储过程中执行动态SQL语句的方法
- 动态执行SQL语句
- oracle存储过程中如何执行动态SQL语句
- 为什么ASP中执行动态SQL总报错误信息?提示语句语法错误
- Oracle 过程中执行动态 SQL 或 DDL 语句
- sqlserver 执行包含动态列的sql语句
- 动态语句exec与sp_executesql执行计划区别
- mybatis执行动态sql语句
- SQL SERVER 中构建执行动态SQL语句