Tring创建一个简单的过程,该过程接受输入并执行如下所示的Select Query:
CREATE OR REPLACE PROCEDURE test3(br IN VARCHAR2)
AS
a varchar(32);
BEGIN
SELECT * FROM BRANDS B WHERE B.BRAND_ID = br INTO a;
dbms_output.put_line(a);
END;
我得到以下错误:
Errors: PROCEDURE TEST3
Line/Col: 5/1 PL/SQL: SQL Statement ignored
Line/Col: 5/47 PL/SQL: ORA-00933: SQL command not properly ended
表为:
BRAND_ID | 名称 | 地址JOIN_DATE密码 |
---|---|---|
Brand01 | BrandX | 503 Rolling Creek Dr Austin|
品牌02 | Y品牌 | 加利福尼亚州科罗纳多奥兰治大道939号 | 2021年3月25日<1234abcde>
品牌03 | Z品牌 | 新泽西州普林斯顿市罗斯泽尔路20号 | 2021年8月5日<1234abcde>
- 您希望
INTO
子句位于FROM
之前 - 您需要一个带有
SELECT *
的%ROWTYPE
变量 - 从上一点开始,您不能在记录上使用
DBMS_OUTPUT.PUT_LINE()
;您需要提取各个字段 - 您应该处理
NO_DATA_FOUND
异常 - 请勿将密码存储为纯文本。存储密码的单向哈希
哪个给出:
CREATE OR REPLACE PROCEDURE test3(
br IN BRANDS.BRAND_ID%TYPE
)
AS
a BRANDS%ROWTYPE;
BEGIN
SELECT *
INTO a
FROM BRANDS
WHERE BRAND_ID = br;
dbms_output.put_line(
a.brand_id
|| ' ' || a.name
|| ' ' || a.address
|| ' ' || a.join_date
|| ' ' || a.password
);
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
/
然后:
BEGIN
test3('Brand02');
END;
/
输出:
Brand02 Brand Y 939 Orange Ave Coronado, CA 25-MAR-21 12345abcde
db<gt;小提琴这里