oracle存储过程创建一个表名由程序输入的表初学oracle,要创建一个表,表名是在程序中由用户输入参数决定(如
oracle存储过程创建一个表名由程序输入的表
初学oracle,要创建一个表,表名是在程序中由用户输入参数决定(如输入001),在程序中调用此存储过程,创建一个表,名为aaa001(aaa是固定的).然后向表中插入数据,加入一行数据,同时删除源数据表中对应的一行数据。
目前只会创建表如下:
create or replace procedure pro_create is
begin
execute immediate 'create table pflsjl201102 //这里想要做到表名后面的日期是通过程序输入可控的
(
cpdxdm int,
cpdxmc varchar2(50),
cprydm int,
cpryxm varchar2(30),
kkrwh int,
bprydm int,
bprymc varchar2(30),
pjzbdm int,
pjzbmc varchar2(200),
pfdj number(12),
pfsj date
)';
end pro_create;
另外一个问题就是,从别的表中选出数据插入新建的表,如
insert into pflsjl201102 (cpdxdm,cpdxmc)
select dm,mc from cpdx;
但是要求数据是一条一条取出来,取一条删一条,这样的话是不是一定要用游标实现,还是有什么更简便的办法?
请高手帮助,谢谢!
[解决办法]
这样OK?
- SQL code
CREATE TABLE tabsrc(id NUMBER(5),sname VARCHAR2(50));INSERT INTO tabsrc SELECT LEVEL,dbms_random.string('P',8 ) FROM dual CONNECT BY LEVEL<=20;CREATE OR REPLACE PROCEDURE p001(p_tablename IN VARCHAR2) AS v_id tabsrc.id%TYPE;v_sname tabsrc.sname%TYPE;BEGIN execute IMMEDIATE 'create table aaa'||p_tablename||'(id number(5),sname varchar2(50))'; BEGIN select id,sname INTO v_id,v_sname from tabsrc where rownum=1; EXCEPTION WHEN No_Data_Found THEN raise_application_error(-20102,'** Thats no data in tabsrc now! **'); END; Dbms_Output.put_line('value:'||v_id||v_sname); execute IMMEDIATE 'insert into aaa'||p_tablename||' values ('''||v_id||''','''||v_sname||''')'; IF SQL%ROWCOUNT=1 THEN DELETE FROM tabsrc WHERE id=v_id AND sname=v_sname; END IF;END p001;EXEC p001('001');Line Pos Text23 PL/SQL block, executed in 0.047 sec. value:1|pSn%@~8 Total execution time 0.047 sec.SELECT * FROM aaa001;ID SNAME1 |pSn%@~8SELECT Count(*) FROM tabsrc WHERE id=1 AND sname='pSn%@~8';COUNT(*)0
[解决办法]
[解决办法]
