【发布时间】:2017-11-18 10:03:39
【问题描述】:
如何在 plsql 中使用函数/过程创建表,以便将表名作为动态变量并使用提供的参数创建该表? A)我试过这个:
CREATE OR REPLACE PROCEDURE CREATE_TABLE IS
UN VARCHAR2(20) :=&TABLE_NAME;
BEGIN
CREATE TABLE UN(CUSTOMER_ID NUMBER,ORDER_DATE VARCHAR2(20),ORDER_MODE VARCHAR2(20),ORDER_STATUS NUMBER,SALES_REP_ID NUMBER,ORDER_TOTAL NUMBER,
PROMOTION_ID CHAR,ERROR_MESSAGE VARCHAR2(30),RECORD_STATUS CHAR);
end;
insert into UN(select distinct CUSTOMER_ID,TO_CHAR(TO_TIMESTAMP(ORDER_DATE),'DD-MM-YYYY'),UPPER(ORDER_MODE),UPPER(ORDER_STATUS),SALES_REP_ID,ORDER_TOTAL,PROMOTION_ID,ERROR_MESSAGE,RECORD_STATUS
FROM LIKHITH where ORDER_TOTAL >0 AND ORDER_TOTAL NOT LIKE '%.%');
IF COUNT(CUSTOMER_ID)=9 THEN
(
UPDATE LIKHITH SET (RECORD_STATUS='E' AND ERROR_MESSAGE='ERR') WHERE (ORDER_TOTAL<0 OR ORDER_TOTAL NOT LIKE '%.%');
UPDATE LIKHITH SET RECORD_STATUS='P' WHERE (ORDER_TOTAL<0 AND ORDER_TOTAL NOT LIKE '%.%');
UPDATE UN SET RECORD_STATUS='P';
)
END IF;
)
END;
/
【问题讨论】:
-
即使 PL/SQL 有
create table(它没有),这也永远无法编译,因为表UN无法在编译时解析。&TABLE_NAME但是将在编译时解析(假设这是由支持替换变量并使用&字符的应用程序运行的),这可能不是您想要的。 -
感谢您的回复,我明白了您所说的并修改了代码,现在终于可以使用了。
标签: oracle function plsql procedure