在Oracle PL/SQL中,我有這種編碼,它給了我編譯器錯誤。我不知道爲什麼,看起來像我擁有一切......Oracle PL/SQL如何找到這個語法錯誤?
請幫忙。
感謝
ORA-06550: line 6, column 5:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
(begin case declare end exit for goto if loop mod null
pragma raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
代碼是
begin
for c in (select id from tmp_A)
loop
dbms_output.put_line(c.id);
create table tmp_c as
select B.name from tmp_B B where B.id = c.id;
drop table tmp_c;
end loop;
end;
/
爲什麼要在運行時創建一個表?在Oracle中這是非常罕見的,因爲這是必要的,絕大多數人都是這樣寫代碼的,這是一個錯誤。 –
我有一個複雜的相關子查詢,我想把它分成易於理解的小塊。 – user595234
這似乎不是在運行時創建表的合理理由。訴諸動態SQL不會讓你的代碼更易於理解。它會阻止多個會話成功調用相同的代碼(動態創建的表對所有會話都立即可見)。有可能,您可能希望在您的過程之外創建一個全局臨時表,然後在代碼中插入該臨時表中,但即使這種情況非常不尋常。如果您想將代碼分成易於理解的部分,請使用模塊化功能和過程。 –