oracle apex:编译错误成功

velaa5lx  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(345)

我试图在oracle apex中创建一个名为“问候”的过程。这个过程运行时出现了一些错误,称为“success with compilation error”。我下面的代码有什么问题吗。
代码:

create table tb_Animals (
    txt_Name varchar(20) Primary Key,
    int_Weight number
);

insert into tb_Animals values ('Dog',30);
insert into tb_Animals values ('Cat',15);

CREATE OR REPLACE PROCEDURE greetings 
AS 
BEGIN 
   select * from tb_Animals;
END;
z5btuh9x

z5btuh9x1#

在pl/sql中,您必须将这些值插入到某些内容中,通常是一个变量,但是,如果您选择的是整个表内容,那么它必须是其他内容;一个选项可能是refcursor。例如:

SQL> CREATE OR REPLACE PROCEDURE greetings
  2  AS
  3    rc sys_refcursor;
  4  BEGIN
  5    open rc for
  6     select * from tb_Animals;
  7  END;
  8  /

Procedure created.

SQL>

就编译而言,它现在是正确的,但实际的“解决方案”取决于您真正想要做什么。

bakd9h0s

bakd9h0s2#

我在这里看到两个问题:
您提供的代码是一个sql脚本,它将创建过程,而不是运行过程。这个错误告诉您过程已经创建,但是它有一个错误。在create命令完成后,在sqlplus提示符下输入“showrerrors”,可以看到精确的错误。
过程本身的问题是,您必须对所选的数据进行处理。它需要被处理成变量,或者出于某种目的在for/next循环中使用。简单地将数据选择为空是行不通的—pl/sql是一种编程语言,而不是脚本语言。有关初学者指南,请参见此处:https://oracle-base.com/articles/misc/introduction-to-plsql. 我不能提供任何比这更具体的指导,因为你没有提供任何关于你的程序实际上要做什么的信息。
如果您只想让脚本返回刚刚插入到表中作为确认的数据,只需运行select语句而不使用过程性内容,就像这样(不要忘记提交更改!):

create table tb_Animals (
    txt_Name varchar(20) Primary Key,
    int_Weight number
);

insert into tb_Animals values ('Dog',30);
insert into tb_Animals values ('Cat',15);
commit;

select * from tb_Animals;

相关问题