`

oracle execute immediate

 
阅读更多

解析并马上执行动态语句 ,或非运行时创建的pl/sql块

1. 不提交dml事务,要显式提交;
execute immediate处理ddl,会提交所以以前改变的数据;

2.不支持多行查询,可以临时表 或者ref cursors

3.执行sql不需语句,执行pl/sql 要加分号;

--0.传入
declare
	i_aac001 number(6):=111;
begin
	execute immediate 'insert into a2(aac001) values(:1)'
	using i_aac001; 
end;


insert into a2(aac001) values(1);
insert into a2(aac001) values(2);


--1.传入/传出
declare
	cnt number(6);
begin
	execute immediate 'select 1 from dual where 1=:1' into cnt
	using cnt;
	dbms_output.put_line(cnt);
end;

--2.调用存储过程
declare
	s1 varchar2(10);
	s2 varchar2(10);
begin
	execute immediate 'begin test1(:1,:2); end;'
	using s1,s2;
end;

--3.传值到记录
declare
--类型
--声明
	type type_a is record(str varchar2(10));
	v_a type_a;
	v_b a2%rowtype;
begin
	execute immediate 'select * from a2 where aac001=1742178' 
	into v_b;
end;

--4.多行查询 用临时表 或ref cursors
declare 
   l_sal    pls_integer := 2000; 
begin 
   execute immediate 'insert into temp(empno, ename) ' || 
                    '           select empno, ename from emp ' || 
                    '           where   sal > :1' 
     using l_sal; 
   commit; 
end; 

http://baiyaoming.iteye.com/blog/1255016


for in  变量声明类型
-------------------------------
declare
cursor cur is select * from a2;
begin
	for c in (select * from a2) loop
		dbms_output.put_line(c.aac002);
	end loop;
end;

insert into a2(aac001) values(1);

declare
	type t_a is table of a2%rowtype;
	type t_b is table of number(10) index by pls_integer;
	v_a t_a;
	v_b t_b;
begin
	select aac001 bulk collect into v_b from a2;
	for i in v_b.first..v_b.last loop
		dbms_output.put_line(v_b(i));
	end loop;
end;



分享到:
评论

相关推荐

    Oracle中EXECUTE IMMEDIATE用法

    Oracle中EXECUTE IMMEDIATE用法

    execute immediate 用法研究

    execute immediate 用法研究 为初学者打造。

    oracle动态sql之EXECUTE IMMEDIATE.docx

    oracle动态sql之EXECUTE IMMEDIATE.docx

    OCI 操作读取oracle

    OCILIB是一个便携式Oracle驱动程序,可提供非常快速和可靠地访问Oracle数据库。它提供了一个丰富,功能齐全,并易于使用的API 。OCILIB

    EXECUTE IMMEDIATE用法小结

    EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.

    ideaSqlHelper

    插入字符串作为 Oracle EXECUTE IMMEDIATE 语句 用法:编辑 -> 转换为 PHP 字符串(ctrl + alt + shift + P) 安装: 下载ideaHelpfulPlugins.jar 在 phpStorm Settings -> Plugins -> Install plugin from disk...

    Oracle删除表、字段之前判断表、字段是否存在

    在Oracle中若删除一个不存在的表,如 “DROP TABLE tableName”,则会提示: ORA-00942:表或视图不存在 若在程序中执行该语句则会报异常,这就需要...EXECUTE IMMEDIATE 'DROP TABLE tableName'; END IF; END; 在Oracle中

    oracle-function-执行动态sql

    execute immediate str_sql into tabtcn; --动态执行DDL语句

    ORACLE培训第三篇-动态SQL编写

    ORACLE 培训 动态SQL编写 EXECUTE IMMEDIATE用法 DBMS_SQL用法

    Oracle数据库游标使用大全

    整理的Oracle数据库游标使用大全 ...较好的PL/SQL程序设计是在PL/SQL块中使用象DBMS_SQL这样的内建包或执行EXECUTE IMMEDIATE命令建立动态SQL来执行DDL命令,PL/SQL编译器保证对象引用以及用户的权限。。。。。。

    如何安全快速的批量删除Oracle数据库外部会话session

    在ORACLE数据库杀掉会话进程有三种方式: 1:ALTER SYSTEM KILL SESSION 关于KILL SESSION Clause ,官方文档描述alter system kill session实际上...Specify IMMEDIATE to instruct Oracle Database to roll back on

    linux oracle 12c 自动启动.docx

    linux oracle 12c 自动启动.docx Oracle12c2 开机自动启动 触发器 SQL> create or replace trigger open_pbds ... 4 execute immediate 'ALTER PLUGGABLE DATABASE ALL OPEN'; 5 end open_pdbs; 6 /

    oracle 重置序列从指定数字开始的方法详解

    重置oracle序列从指定数字开始 代码如下: declare n number(10);...–序列名 begin execute immediate ‘select ‘||v_seqname||’.nextval from dual’ into n; n:=v_startnum-n-v_step;–从10000001开始 tsql:=’alt

    oracle sequence语句重置方介绍

    在开发过程中,可能会用到oracle sequence语句,本文以oracle sequence语句如何重置进行介绍,需要的朋友... EXECUTE IMMEDIATE ‘SELECT ‘ || p_seqName || ‘.NEXTVAL FROM dual ‘ INTO n; n := – (n – 1); tsql :

    Oracle查询总结与优化

    execute immediate v_sql into v_count; p_OutRecordCount := v_count; ----执行分页查询 v_heiRownum := p_PageNo * p_PageSize; v_lowRownum := v_heiRownum - p_PageSize + 1; v_sql := 'SELECT * FROM ...

    oracle实验报告

    EXECUTE IMMEDIATE stmt; end if; end; --- create or replace trigger SYS.aurora$server$startup after startup on database call dbms_java.server_startup -- create or replace trigger SYS.JIS$ROLE_...

    Oracle带输入输出参数存储过程(包括sql分页功能)

    begin /*这里不能直接执行select语句但可以直接执行update、delete、insert语句*/ end里面不能接执行select语句,声明会话级临时表必须有“execute immediate 'TRUNCATE TABLE 表名';”这一句不然其他的session无法...

    为快捷显示Oracle执行计划创建存储过程

    第一种:不设置输出格式参数,即用默认的 SQL> create or replace procedure sql_explain(v_sql varchar2) ...  7 execute immediate 'explain plan for '||v_sql;  8 open explain_cursor fo

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色主要用于访问数据字典视图和包。  EXP_FULL_DATABASE, IMP_FULL_DATABASE这两个角色用于数据导入导出工具的使用。  自定义角色 ...

    oracle如何恢复被覆盖的存储过程

    如果你不小心覆盖了之前的存储过程,那得赶紧闪回,时长越长闪回的可能性越小。原理很简单,存储过程的定义就是数据字典,修改数据字典跟修改普通表的... 10000 loop execute immediate ‘select count(*) from t where

Global site tag (gtag.js) - Google Analytics