写了个建表的存储过程如下:
create or replace predure create table(tablename in varchar)as begin
select * from tablename;
create table testtable
(
tid number(1)
);end predure;
提示两个错误:红色部分
第一:不能写tablename,提示表不存在,我不能通过参数动态传递表名吗?改成testtable001(已存在的表),问题解决,只能做成这么静态的形式吗?!!
第二:create错误,好像不能在存储过程中建表吗?错误原因看不懂。应该写在哪才对?请高手帮忙解决下。
create or replace predure create table(tablename in varchar)as begin
select * from tablename;
create table testtable
(
tid number(1)
);end predure;
提示两个错误:红色部分
第一:不能写tablename,提示表不存在,我不能通过参数动态传递表名吗?改成testtable001(已存在的表),问题解决,只能做成这么静态的形式吗?!!
第二:create错误,好像不能在存储过程中建表吗?错误原因看不懂。应该写在哪才对?请高手帮忙解决下。
sqlstr:='select * from '||tablename;
execute immediate sqlstr;第二个问题也用变量,然后执行
cursor cur is select * from tablename
open cursor for sqlstr;
as
strfld varchar2(20); --假设tablename里面有个字段类型为varchar2的,这个变量用来保存字段值
sqlstr varchar2(1000);
begin
sqlstr:='select field1 from '||tablename;
execute immediate sqlstr into strfld; ---如果取出的记录不是1条,包括0或者>1,以上语句都会报错,加上这个异常处理就不报错了。
exception when others then null; sqlstr:='create table testtable(tid number(1))';
execute immediate sqlstr into strfld;
end predure;