我有我需要删除和创建表的功能。在下面的例子中我尝试创建表,但它无法如何在Oracle函数内创建和删除表?
CREATE OR REPLACE FUNCTION DEVTEST
RETURN NUMBER
IS
COMMAND VARCHAR2(256);
ID VARCHAR2(128);
NAME VARCHAR2(128);
TMP_LIST VARCHAR2(128);
BEGIN
ID := '12345';
NAME := 'ABCdef';
TMP_LIST := 'tmpTest';
command := 'create table ' || TMP_LIST || ' (USER_ID VARCHAR2(11), USER_NAME VARCHAR2(36))';
DBMS_OUTPUT.PUT_LINE('command = ' || command);
EXECUTE IMMEDIATE command;
return 0;
END;
我调用该函数:
select NSB_DEVTEST() from dual
并且得到错误:
ORA-14552:无法执行DDL,在查询或DML中提交或回滚ORA-06512:在“DEV1_SERVER.DEVTEST”,第15行
如何更正此问题以在函数内创建/删除表?
我的服务器的详细信息:
Oracle数据库10g企业版发布10.2.0.5.0 - 64bi
PL/SQL发布10.2.0.5.0 - 生产
CORE 10.2.0.5.0生产
TNS用于Solaris:版本10.2.0.5.0 - 生产
NLSRTL版10.2.0.5.0 - 生产
2015-04-21
Barry
+0
为什么一个函数而不是一个过程? –
+0
这并不回答你的问题,但动态创建/删除表几乎总是错误的方法。你需要一个'TEMPORARY TABLE'吗? –
+0
使用过程,而不是函数 –