相关文章推荐
暴走的长颈鹿  ·  pd.set_option('display ...·  1 年前    · 
博学的牛肉面  ·  ConfigMgr 2007 ...·  1 年前    · 
讲道义的硬盘  ·  Python ...·  2 年前    · 

(作者:陈玓玏)
上一篇记录的是通过自定义函数复制表的笔记,但是觉得过程还是有些麻烦。觉得还是用存储过程更简洁些,今天就把存储过程的写法整理出来了。下面代码用的时候记得把相应位置变量替换成你自己的。

--使用存储过程复制表,使用存储过程来复制表比使用自定义函数更简单,因为自定义函数返回多行结果需要用游标,但带游标的查询语句不能用于create as。
create or replace procedure createtable(tname in varchar2,id in number)
   --sql_sent是用来存储sql语句的临时变量,存储过程可以不设置返回值,这也是它和自定义函数的重要区别
    sql_sent varchar2(20000);
begin
    sql_sent:='create table '||tname||' as select col from tableName where id='||id;
    execute immediate sql_sent;
    commit;
--执行存储过程
exec createtable('new_tablename',112);

上面是比较简单的参数传入,涉及到时间参数时,处理起来会麻烦一些,时间参数如下:
上面是比较

//复制join之后的表,并将时间作为传入的参数。这个地方很容易出错,首先就是单引号的问题,需要再加单引号实现转义
,所以最好是用dbms_output.put_line(sql_sent);输出sql语句看一下是否正确
create or replace procedure createtable(tname in varchar2,date_time in varchar2)
    sql_sent varchar2(20000);
begin
    sql_sent:='''yyyy-mm-dd''';
    sql_sent:='create table '||tname||' as select * from tableName where trunc(sa_time)>=to_date('||date_time||','||sql_sent||')';
   --这样拼接的字符串作SQL语句常常容易出现拼写的问题,所以最好是输出语句检查一下是否存在问题
    dbms_output.put_line(sql_sent);
    execute immediate sql_sent;
    commit;
--执行存储过程
exec createtable('newTableName','''2018-09-01''');
                    (作者:陈玓玏)上一篇记录的是通过自定义函数复制表的笔记,但是觉得过程还是有些麻烦。觉得还是用存储过程更简洁些,今天就把存储过程的写法整理出来了。下面代码用的时候记得把相应位置变量替换成你自己的。--使用存储过程复制表,使用存储过程来复制表比使用自定义函数更简单,因为自定义函数返回多行结果需要用游标,但带游标的查询语句不能用于create as。create or replace proce...
				
多年前写的复制目标数据库指定的数据到本地。 程序丢了可惜,分享下。 执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log中。同步完成后自动删除动态生成的存储过程、dblink。 本程序不同步blob和clob字段,玩oracle的人都懂,用sql同步此类数据,速度上不去,此类数据应该要用导出导入的方式提升速度。 具体请参阅程序,可根据自已需要进行修改。 参数说明: CREATE OR REPLACE PROCEDURE syncTable( ip IN VARCHAR2,--目标数据库ip地址 port IN NUMBER,--目标数据库端口号 sid varchar2,--目标数据库SID ora_user VARCHAR2,--目标数据库登录用户名 passwd VARCHAR2,--目标数据库登录密码 src_table_name IN VARCHAR2,--目标数据需要同步的(数据源) dest_table_name IN VARCHAR2,--把目标同步到本地库的名,无则创建与目标一致的名 errMsg OUT VARCHAR2)--输出执行信息。 程序同步到执行结束时的目标所有数据,不按任何字段排序,只判断并记录row_number()到日志,中断后重新执行可继续同步,如果目标频繁读写,不保证数据完全正常,故最好是目标不变动情况下执行同步。 有问题请私信或留言。
存储过程中,where 条件 in( 变量 );这样的方式,in()里面只能存放一个值,像in('test')这样,但是,当in('test1','test2','test3')这样的形式就没有作用。 需要将 in( 变量 )中的变量格式化。用Oracle的正则达式。因为我在Java后台封装的String为 String str = "test1,test2,test3...";这种 所以...
[code="sql"] create or replace procedure SP_G902005(TeburuName VARCHAR, --テーブル RESULT OUT INT --結果(0:成功; -1:失敗) ) i...
Oracle复制或者复制结构 1. 复制结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制结构(后面加where条件): create table table_name_new as select * from table_name_old where 1=0;
关于JAVA调用ORACLE存储过程时,传入动态参数作为in语句条件的问题   需求:需要将多个参数作为一个参数传给存储过程执行,如:参数'1000','2000','3000','4000'等多个参数   作为一个字符串参数传递给存储过程PROC_RPT110(?)。存储过程将这个参数作为查询语句   in('1000','2000','3000','4000')的条件查询多个值。
Oracle存储过程中的OUT参数是用来在存储过程执行完成后将结果返回给调用程序的参数。在定义存储过程时,OUT参数需要使用关键字 OUT 来声明,在调用存储过程时需要提供一个变量来接收返回值。例如: CREATE OR REPLACE PROCEDURE get_employee_name (emp_id IN NUMBER, emp_name OUT VARCHAR2) AS BEGIN SELECT name INTO emp_name FROM employees WHERE id = emp_id; 调用该存储过程如下 DECLARE emp_name VARCHAR2(100); BEGIN get_employee_name(1, emp_name); DBMS_OUTPUT.PUT_LINE(emp_name);