在Oracle中的过程中运行SQL查询时出错



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

表为:

地址JOIN_DATE503 Rolling Creek Dr Austin2021年3月25日<1234abcde>2021年8月5日<1234abcde>
BRAND_ID名称密码
Brand01BrandX
品牌02Y品牌加利福尼亚州科罗纳多奥兰治大道939号
品牌03Z品牌新泽西州普林斯顿市罗斯泽尔路20号
  • 您希望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;小提琴这里

最新更新