如何使用此代码添加匿名块
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>
【讨论】:
以上是关于如何使用此代码添加匿名块的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PostgreSQL、PL/pgSQL 上执行匿名代码块切换 CASE 语句?