Oracle 存储过程,临时表,动态SQL测试

--创建事务级别的结果临时表
create global temporary table tmp_yshy(
 c1 varchar2(100),
 c2 varchar2(100)
)on commit delete rows;
--创建事务级别的存储sql语句的临时表
create global temporary table tmp_sql(
 c1 varchar2(4000)
)on commit delete rows;

测试表:

-- Create table
create table T_USER
(
  NAME VARCHAR2(20),
  AGE  NUMBER
)
--首先建包
create or replace package pack_user
as
  -- 1:根据年龄查询所有用户
  procedure p_user_select(
    av_age        number,        --年龄
    av_suc out    varchar2       --是否成功标识
  );

end pack_user;
--创建包体
create or replace package body pack_user
as
 --1:根据年龄查询所有用户
 procedure p_user_select(
   av_age         number,
   av_suc out     varchar2
 )
 as
   lv_sql         varchar2(4000);
 begin
   av_suc:=‘T‘;

   lv_sql:=‘ insert into tmp_yshy(c1,c2) ‘||
           ‘ select name,age ‘||
           ‘ from t_user ‘||
           ‘ where age >‘||av_age;

   insert into tmp_sql(c1) values(lv_sql||‘;‘);

   execute immediate lv_sql;

   exception
     when others then
       rollback;
       av_suc:=‘F‘||‘ ‘||to_char(sqlcode)||‘ : ‘||sqlerrm;
       dbms_output.put_line(av_suc);
 end p_user_select;

end pack_user;

PL/SQL Developer SQLWindow测试:

 declare
    a varchar2(100);
 begin
    pack_user.p_user_select(25,a);
 end;
select * from tmp_yshy;
select * from tmp_sql;
时间: 2024-11-12 09:50:41

Oracle 存储过程,临时表,动态SQL测试的相关文章

oracle 存储过程 调用动态sql

oracle 存储过程 调用动态sql CreationTime--2018年8月16日11点25分 Author:Marydon 1.错误实现方式 --开始时间拼接' 00:00:00' V_SQL := 'select decode(length(' || V_END || '),10,' || 'concat(' || V_END || ', 00:00:00),' || V_END || ') from dual'; EXECUTE IMMEDIATE V_SQL; 编译成功,但是存储过

存储过程执行动态sql语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批

在存储过程中用动态SQL建表后如果用PL/SQL插入

请教各位老师一个问题,如果想把一个表的建立并插入数据放到一个存储过程中,应该要怎么处理呢,如果插入数据的表在存过中插入数据之前未建立,存储过程会报错提示表不存在,导致存储过程失效,有没有什么变通的办法呢? 之所以不在存储过程之外建表是想定时执行这个存储过程,如果存在表被DROP的情况,就会导致存储过程插入数据报错了,所以想在存储过程中自动把表的建立和处理一起考虑了,插入数据不考虑使用动态SQL来插入,因为这样的话就不能使用plsql的东西了(比如远程链接优化的提示),请教怎么处理,谢谢啦! 简单

oracle 存储过程 变量的声明和赋值的3种方式

oracle 存储过程 变量的声明和赋值的3种方式 CreationTime--2018年8月31日16点00分 Author:Marydon 1.声明变量的3种方式 按照数据类型的声明方式进行区分 方式一:直接声明数据类型 格式:变量名 数据类型(大小) V_START_DATE VARCHAR2(19); v_num number; 说明: 设置为字符串类型时,需要指定大小,否则报错: 变量的声明必须在"begin"关键字之前进行. --错误用法 BEGIN v_sql varch

SQL Server创建存储过程——动态SQL

简介: 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功, 存储过程并不能像函数那样被直接调用,只能利用 execute 来执行存储过程. 优点: 1.提高应用程序的通用性和可移植性:存储过程创建后,可以在程序中被多次调用,而不必重新编写该存储过

动态 SQL

SQL Server 允许用字符串来动态构造 T-SQL 代码的一个批处理,接着再执行这个批处理.这种功能称为动态SQL (dynamic SQL).SQL Server提供了两种执行动态 SQL 的方法:使用 EXEC(EXECUTE 的缩写)命令和sp_executesql 存储过程. 动态SQL 可以用于以下几种用途: ♦ 自动化管理任务.例如,对于数据库实例中的每个数据库,查询其元数据,为其执行 BACKUP DATABASE 语句. ♦ 改善特定任务的性能.例如,构造参数化的特定查询,

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

在oracle存储过程中创建临时表

在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建临时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

db2存储过程动态sql被截断

编写存储过程,使用动态sql时,调试时发现变量赋值后被截断. 关键代码如下: 实现的效果是先把上下游做对比的sql语句和相关参数存入RKDM_DATA_VOID_RULE, 执行存储过程后把两个sql语句得出的结果插入另一张结果表RKDM_DATA_VOID_CHK_REST. 建表语句: CREATE TABLE RKDM_DATA_VOID_CHK_REST ( DATA_DT DATE, ORDR_NUM INTEGER, CHK_BIG_CLS VARCHAR(256), DATA_PR