运行 SQL 在 Oracle 过程中查询时出错
Getting error while running SQL query in Procedure in Oracle
尝试创建一个接受输入并执行 Select 查询的简单过程,如下所示:
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
Table 是:
BRAND_ID
NAME
ADDRESS
JOIN_DATE
PASSWORD
Brand01
Brand X
503 Rolling Creek Dr Austin, AR
04/01/2021
12345abcde
Brand02
Brand Y
939 Orange Ave Coronado, CA
03/25/2021
12345abcde
Brand03
Brand Z
20 Roszel Rd Princeton, NJ
05/08/2021
12345abcde
- 您需要
FROM
之前的 INTO
子句。
- 您需要一个带有
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<>fiddle here
尝试创建一个接受输入并执行 Select 查询的简单过程,如下所示:
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
Table 是:
BRAND_ID | NAME | ADDRESS | JOIN_DATE | PASSWORD |
---|---|---|---|---|
Brand01 | Brand X | 503 Rolling Creek Dr Austin, AR | 04/01/2021 | 12345abcde |
Brand02 | Brand Y | 939 Orange Ave Coronado, CA | 03/25/2021 | 12345abcde |
Brand03 | Brand Z | 20 Roszel Rd Princeton, NJ | 05/08/2021 | 12345abcde |
- 您需要
FROM
之前的INTO
子句。 - 您需要一个带有
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<>fiddle here