【问题标题】:Oracle Apex: Success With compilation errorOracle Apex:编译错误成功
【发布时间】:2020-09-23 07:45:22
【问题描述】:

我正在尝试在 oracle apex 中创建一个名为“Greetings”的过程。程序问候运行时抛出一些错误,称为“编译错误成功”。我下面的代码有什么问题吗?

代码:

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;

【问题讨论】:

  • 您真正使用哪个数据库?它是 MySQL 和 Oracle 吗?如果没有,请删除您不使用的那个。
  • 我已经删除了 mySql。我用过甲骨文。

标签: sql oracle11g oracle-apex


【解决方案1】:

在 PL/SQL 中,您必须将这些值插入 某个东西中,通常是一个变量,但是,如果您要选择整个表格内容,那么它必须是其他东西;一个选项可能是一个参考。例如:

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>

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

【讨论】:

  • 感谢您抽出宝贵时间回答。你能解释一下 sys_refcursor 和 open rc 的实际作用吗?
  • 不客气。它是一个 weak 引用光标;它接受任何结果集。 OPEN 是将 SELECT 语句的结果实际“放入”其中的方式。
  • 谢谢伙计,但我见过有人在没有 ref_cursor 的情况下在程序中进行查询。这是c-sharpcorner.com/UploadFile/rohatash/…
  • 这怎么可能?
  • 我从来没有说过 refcursor 是唯一的方法;它只是一个选项,还有其他可用的。您将选择的那个取决于 - 正如我所说 - 从 tb_animals 表中选择所有行后您想要做什么。
【解决方案2】:

我在这里看到两个问题:

  1. 您提供的代码是一个SQL 脚本,它将创建 过程,而不是运行 过程。该错误告诉您该过程已创建,但它有一个错误。创建命令完成后,您可以通过在 sqlplus 提示符下输入“SHOW ERRORS”来查看确切的错误。
  2. 该过程本身的问题是您必须您选择的数据做一些事情。它需要被处理成变量,或者出于某种目的在 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;

【讨论】:

  • 但我见过人们执行查询,例如在表中插入值,或在过程中选择表。
  • 那怎么可能呢?
  • 您的示例适用于 SQL Server,而不是 Oracle。不是一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多