pl/sql 过程不允许将表名/视图名作为参数传递
Posted
技术标签:
【中文标题】pl/sql 过程不允许将表名/视图名作为参数传递【英文标题】:pl/sql procedure not allowing to pass table names/view names as parameters 【发布时间】:2014-08-21 13:46:46 【问题描述】:我有一个 pl/sql 小程序,想在 12c 中运行,代码如下:
create or replace procedure p_ins_tbl(tbl_name in varchar2) as
begin
execute immediate 'insert into ' ||tbl_name|| 'values(121,''asdfasdf'',6)' ;
end p_ins_tbl;
编译成功,
当我尝试使用执行它时:exec p_ins_tbl(countries);
我得到的错误是:
Error starting at line 6 in command:
exec p_ins_tbl(countries)
Error report:
ORA-06550: line 1, column 17:
PLS-00357: Table,View Or Sequence reference 'COUNTRIES' not allowed in this context
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
你有什么理由得到这个?如果是,程序是否有任何错误,请纠正我..提前谢谢。
【问题讨论】:
在values
之前添加一个空格,如下所示:||tbl_name|| ' values(121,''asdfasdf'',6)'
【参考方案1】:
试试这个:
execute p_ins_tbl('countries');
【讨论】:
create or replace procedure crt_tbl_rpt(tbl_rpt in varchar2,tbl_cpy in varchar2) is begin execute immediate 'create table '||tbl_rpt|| 'as select * from '||tbl_cpy ; end crt_tbl_rpt;
当我将此过程称为:execute crt_tbl_rpt('dept_cpy','departments');
时返回给我错误:你能告诉我为什么会这样吗?错误是:Error report: ORA-00922: missing or invalid option ORA-06512: at "HR.CRT_TBL_RPT", line 3 ORA-06512: at line 1 00922. 00000 - "missing or invalid option"
'create table '||tbl_rpt|| 'as select * from '||tbl_cpy ;
错了,'
和as
之间需要一个空格,否则就像create table dept_cpyas select...
下次创建一个新问题,我不想免费回答。 以上是关于pl/sql 过程不允许将表名/视图名作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章