如何使用此代码添加匿名块

Posted

技术标签:

【中文标题】如何使用此代码添加匿名块【英文标题】:How to add an anonymous block with this code 【发布时间】:2019-04-07 18:18:31 【问题描述】:

一位初级 SQL 开发人员试图向其中写入一个匿名块,但遇到了问题。代码应该根据一个人的预算计算一个人可以买多少东西。他们确信 SQL 工作正常,并且他们计算产品数量的逻辑没问题,但他们不记得创建匿名块的正确语法。通过查找并修复以下 PL/SQL 中的三个错误来帮助他们:

BEGIN

DECLARE

firstName VARCHAR(50) := 'Rob';

budget NUMBER = 600;

counter NUMBER;

CURSOR all_products AS

        SELECT product_name, list_price FROM oe.PRODUCT_information;



counter := 0;

FOR items IN all_products LOOP

     IF (items.LIST_PRICE <= budget) THEN
          counter := counter + 1;
     END IF;
END LOOP;

DBMS_OUTPUT.PUT_LINE(firstName || ', you can afford ' || TO_CHAR(counter) || ' items.');
END;

【问题讨论】:

到目前为止你有什么尝试? 为什么不给初级程序员一个the Oracle PL/SQL documentation的链接? 【参考方案1】:

两个错误:

DECLARE 应该先走,BEGIN-END 下一个 您错过了 BUDGET 变量的冒号

测试用例:

SQL> set serveroutput on
SQL> create table product_information (product_name varchar2(20), list_price number);

Table created.

SQL> insert into product_Information values('Some product', 100);

1 row created.

您的代码,已修复:

SQL> DECLARE
  2    firstname   VARCHAR(50):= 'Rob';
  3    budget      NUMBER := 600;       -- missing colon
  4    counter     NUMBER;
  5  cursor all_products is
  6    SELECT product_name,
  7           list_price
  8    FROM product_information;        -- I removed OE. (as I don't have that schema)
  9
 10  BEGIN
 11    counter := 0;
 12    FOR items IN all_products LOOP
 13      IF(items.list_price <= budget)THEN
 14        counter := counter + 1;
 15      END IF;
 16    END LOOP;
 17
 18    dbms_output.put_line(firstname
 19                         || ', you can afford '
 20                         || TO_CHAR(counter)
 21                         || ' items.');
 22  END;
 23  /
Rob, you can afford 1 items.

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于如何使用此代码添加匿名块的主要内容,如果未能解决你的问题,请参考以下文章

C#中的匿名块[重复]

如何在 PostgreSQL、PL/pgSQL 上执行匿名代码块切换 CASE 语句?

如何使用返回数据的回调函数设置匿名块

如何使用pl sql中的匿名块打印出整个表?

PL/SQL ORA-01422 SELECT INTO 错误,Oracle 匿名块(NOVA 环境)

如何通过 JDBC 从 Db2 匿名块返回动态结果集?