【问题标题】:Encountered the symbol "DECLARE" and "end of file" issue that has my procedure not working?遇到符号“DECLARE”和“文件结束”问题,我的程序无法正常工作?
【发布时间】:2021-12-24 07:57:02
【问题描述】:

对于家庭作业,我假设打印出payment_total 和invoice_total 的参数为vendor_id 的过程。它编译但它说声明是错误的我不确定我的语法是否错误或问题是什么。

这是我的代码:

CREATE OR REPLACE PROCEDURE vn_payment(vendorID in number)
IS
DECLARE
payment_total vendors.vendor_id%type;
invoice_total vendors.vendor_id%type;
BEGIN
Select vendor_id from vendors 
where vendor_id = vendorID;
DBMS_OUTPUT.PUT_LINE('payment total:' || payment_total || 'and invoice total'
|| invoice_total);
END;

Here is the image

【问题讨论】:

  • 去掉“DECLARE”
  • 声明变量 payment_totalinvoice_total 具有列 vendor_id 的数据类型没有意义,除了您的语法问题(declare 用于匿名块,而不是用于程序 - 它替换 create or replace procedure ... is 片段)。然后:您不应该从表格中选择付款总额和发票总额,而不是供应商ID吗? where 子句需要供应商 ID,但不应在 select 子句中。

标签: sql oracle plsql declare


【解决方案1】:

过程中不需要DECLARE关键字,还需要SELECT ... INTO ...

CREATE OR REPLACE PROCEDURE vn_payment(vendorID in number)
IS
  payment_total vendors.vendor_id%type;
  invoice_total vendors.vendor_id%type;
BEGIN
  Select vendor_id, vendor_id
  INTO   payment_total, invoice_total
  from   vendors 
  where  vendor_id = vendorID;

  DBMS_OUTPUT.PUT_LINE(
    'payment total:' || payment_total || 'and invoice total'|| invoice_total
  );
END;
/

但是,您可能想要选择总数而不是 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 2020-04-03
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多