首页 > 解决方案 > 如何使用此代码添加匿名块

问题描述

一位初级 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;

标签: sqloracleplsql

解决方案


两个错误:

  • 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>

推荐阅读