gpt4 book ai didi

sql - 简单 PL/SQL 程序的问题

转载 作者:行者123 更新时间:2023-12-02 07:15:12 25 4
gpt4 key购买 nike

这是我的简单 PL/SQL 程序:

DECLARE

CURSOR c1 is
SELECT typ, specifikacia_typu, spz FROM Auta
WHERE (substr(spz, 1, 2) = 'KE' OR substr(spz, 1, 2) = 'KS') AND ROWNUM <= 2;
CURSOR c2 is
SELECT typ, specifikacia_typu, spz FROM Auta
WHERE substr(spz, 1, 2) <> 'KE' AND substr(spz, 1, 2) <> 'KS';
my_typ CHAR(10);
my_specifikacia_typu CHAR(15);
my_spz CHAR(8);

BEGIN

-- vytovirt potrebne tabulky pre kosicke a nekosicke auta
CREATE TABLE Kosicke (
typ CHAR(10),
specifikacia_typu CHAR(15),
spz CHAR(8)
);
CREATE TABLE Ostatne (
typ CHAR(10),
specifikacia_typu CHAR(15),
spz CHAR(8)
);

-- prve dve auta z Kosic vlozit do tabulky Kosicke
OPEN c1;
FOR i IN 1..2 LOOP
FETCH c1 INTO my_typ, my_specifikacia_typu, my_spz;
EXIT WHEN c1%NOTFOUND;
INSERT INTO Kosice VALUES(my_typ, my_specifikacia_typu, my_spz);
COMMIT;
END LOOP;
CLOSE c1;

-- auta, ktore nie su z Kosic vlozit do tabulky Ostatne
OPEN c2;
LOOP
FETCH c2 INTO my_typ, my_specifikacia_typu, my_spz;
EXIT WHEN c2%NOTFOUND;
INSERT INTO Ostatne VALUES(my_typ, my_specifikacia_typu, my_spz);
COMMIT;
END LOOP;
CLOSE c1;

END;
/

当我运行 Oracle 10g Express Edition 时,出现以下错误:

ORA-06550: line 16, column 5:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

begin case declare exit for goto if loop mod null pragma
raise return select update while with
<<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe

1. DECLARE
2.
3. CURSOR c1 is

我不确定问题出在哪里,这是我用 PL/SQL 编写的第一个程序,所以我有点迷茫。我使用 Oracle 网站上的这个示例程序来编写这个程序:http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/a_samps.htm#563

编辑:

此外,当我先在程序外创建表然后运行程序时,出现此错误:

ORA-06550: line 17, column 21:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 17, column 9:
PL/SQL: SQL Statement ignored

1. DECLARE
2. CURSOR c1 is
3. SELECT typ, specifikacia_typu, spz FROM Auta

这没有意义,因为表“Auta”存在,程序中使用的所有表都存在。

最佳答案

您不能直接在 PL/SQL 中执行 CREATE TABLE 等 DDL。但是,您可以像这样使用动态 PL/SQL 来完成它:

-- vytovirt potrebne tabulky pre kosicke a nekosicke auta
EXECUTE IMMEDIATE 'CREATE TABLE Kosicke (
typ CHAR(10),
specifikacia_typu CHAR(15),
spz CHAR(8)
)';

您的插入也需要是动态的,因为表在编译时不存在,因此代码无效:

EXECUTE IMMEDIATE 'INSERT INTO Ostatne VALUES(:p1, :p2, :p3)'
USING my_typ, my_specifikacia_typu, my_spz;

不过,了解您为什么需要这样做会很有趣:在 Oracle 中几乎从来不需要“即时”创建表,这样做通常不是一个好主意。

关于sql - 简单 PL/SQL 程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1679786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com