PL / SQL CREATE或REPLACE PROCEDURE使用CREATE TABLE语句

时间:2014-05-06 10:21:45

标签: stored-procedures plsql

我正在参与一些严肃的PL / SQL编程。创建过程的格式是

[CREATE [OR REPLACE]]
   PROCEDURE procedure_name[(parameter[, parameter]...)]
[AUTHID {DEFINER | CURRENT_USER}] {IS | AS}
   [PRAGMA AUTONOMOUS_TRANSACTION;]
   [local declarations]
BEGIN
   executable statements
[EXCEPTION
   exception handlers]
END [name];

我将executable statements放在BEGIN下。为什么我不允许在程序中放置CREATE TABLE语句作为可执行语句?

1 个答案:

答案 0 :(得分:1)

因为CREATE TABLE是一个DDL语句,并且您不能从PL / SQL执行DDL语句(至少不能直接执行)。

如果(这是一个很大的问题)你真的需要这样做,你可以使用DBMS_SQL包或EXECUTE IMMEDIATE(更简单):

create or replace procedure do_it as 
begin
  execute immediate 'CREATE TABLE foo(pk number not null)';
end;

但这通常没有必要。来自SQL Server后台的人员经常接受培训,可以从他们的存储过程中创建大量临时表 - 在Oracle中,您通常会使用全局临时表。