Oracle 在 select 语句中使用多个变量
Oracle using multiple variables in select statement
我正在尝试根据两个条件从 order_master table 中检索记录。
select * from order_master
where ContractNo = 'D00101'
and Contract_SubCode = 'A';
我可以从 Oracle SQL Developer 看到结果。
但是我想通过给变量值而不是给硬编码值来检索记录。
所以我尝试以下方式。
Define Var_ContractNo = 'D09119';
Define Var_Contract_SubCode = 'A';
select * from order_master
where ContractNo = &Var_ContractNo
and Contract_SubCode = &Var_Contract_SubCode;
然后我收到以下错误。
ORA-00904: "A": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 6 Column: 24
所以我尝试另一种方式。
var Var_ContractNo VARCHAR2(20);
var Var_Contract_SubCode VARCHAR(2);
BEGIN
select 'D09119', 'A' into :Var_ContractNo, :Var_Contract_SubCode from dual;
END;
select * from order_master
where ContractNo = :Var_ContractNo
and Contract_SubCode = :Var_Contract_SubCode;
然后我收到了不同的错误信息
Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | BLOB | BFILE
REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ]
Error starting at line : 3 in command -
BEGIN
select 'D09119', 'A' into :Var_ContractNo, :Var_Contract_SubCode from dual;
END;
select * from order_master
where ContractNo = :Var_ContractNo
and Contract_SubCode = :Var_Contract_SubCode;
Error report -
ORA-06550: line 5, column 1:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
请指教。谢谢。
您只需将替换变量包装在查询的 single quotes
中,如下所示:
Define Var_ContractNo = 'D09119';
Define Var_Contract_SubCode = 'A';
select * from order_master
where ContractNo = '&Var_ContractNo'
and Contract_SubCode = '&Var_Contract_SubCode';
也可以使用SQL*加变量:
SQL> select * from t;
X Y
---------- ----------
1 ONE
SQL> --
SQL> var v_in_y varchar2(10);
SQL> var v_out_x varchar2(10);
SQL> begin
2 :v_in_y := 'ONE';
3 select x into :v_out_x from t where y=:v_in_y;
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> print v_out_x
V_OUT_X
--------------------------------
1
SQL>
我正在尝试根据两个条件从 order_master table 中检索记录。
select * from order_master
where ContractNo = 'D00101'
and Contract_SubCode = 'A';
我可以从 Oracle SQL Developer 看到结果。 但是我想通过给变量值而不是给硬编码值来检索记录。
所以我尝试以下方式。
Define Var_ContractNo = 'D09119';
Define Var_Contract_SubCode = 'A';
select * from order_master
where ContractNo = &Var_ContractNo
and Contract_SubCode = &Var_Contract_SubCode;
然后我收到以下错误。
ORA-00904: "A": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 6 Column: 24
所以我尝试另一种方式。
var Var_ContractNo VARCHAR2(20);
var Var_Contract_SubCode VARCHAR(2);
BEGIN
select 'D09119', 'A' into :Var_ContractNo, :Var_Contract_SubCode from dual;
END;
select * from order_master
where ContractNo = :Var_ContractNo
and Contract_SubCode = :Var_Contract_SubCode;
然后我收到了不同的错误信息
Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | BLOB | BFILE
REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ]
Error starting at line : 3 in command -
BEGIN
select 'D09119', 'A' into :Var_ContractNo, :Var_Contract_SubCode from dual;
END;
select * from order_master
where ContractNo = :Var_ContractNo
and Contract_SubCode = :Var_Contract_SubCode;
Error report -
ORA-06550: line 5, column 1:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
请指教。谢谢。
您只需将替换变量包装在查询的 single quotes
中,如下所示:
Define Var_ContractNo = 'D09119';
Define Var_Contract_SubCode = 'A';
select * from order_master
where ContractNo = '&Var_ContractNo'
and Contract_SubCode = '&Var_Contract_SubCode';
也可以使用SQL*加变量:
SQL> select * from t;
X Y
---------- ----------
1 ONE
SQL> --
SQL> var v_in_y varchar2(10);
SQL> var v_out_x varchar2(10);
SQL> begin
2 :v_in_y := 'ONE';
3 select x into :v_out_x from t where y=:v_in_y;
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> print v_out_x
V_OUT_X
--------------------------------
1
SQL>