我正在参与一些严肃的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
语句作为可执行语句?
答案 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中,您通常会使用全局临时表。