Oracle SELECT语句中的绑定变量

Oracle SELECT语句中的绑定变量,oracle,sqlplus,Oracle,Sqlplus,我的Oracle数据库中有表 PROJECTINFO NAME SCHEMA -------------------------- Test W_TEST_000 SAMPLESET NAME SS_ID -------------------------- Test_SSet 1049 在我的SQL*Plus脚本中,有一个替换变量(直接设置或通过用户输入设置) 现在我需要另外两个绑定变量 VAR Project_Schema varcha

我的Oracle数据库中有表

PROJECTINFO
NAME       SCHEMA
--------------------------
Test       W_TEST_000

SAMPLESET 
NAME          SS_ID
--------------------------
Test_SSet     1049
在我的SQL*Plus脚本中,有一个替换变量(直接设置或通过用户输入设置)

现在我需要另外两个绑定变量

VAR Project_Schema varchar2(50)
VAR SampleSet_ID number
然后我需要将SELECT语句的结果放入两个bind变量中

SELECT SCHEMA INTO :Project_Schema FROM PROJECTINFO WHERE NAME = '&Project_Name';
SELECT SS_ID INTO :SampleSet_ID from SAMPLESET WHERE NAME = '&SampleSet_Name';
现在,我需要在
W\u TEST\u 000的SELECT语句中同时使用
:Project\u Schema
:SampleSet\u ID
。我的表
子表如下:

SELECT NAME FROM :Project_Schema.MY_TABLE WHERE SS_ID = :SampleSet_ID
但这是行不通的。。(ORA-00903:表名无效)


如何在同一个SQL*Plus脚本中的未来SQL请求中使用绑定变量?

如果将选择封装在PL/SQL块中,则可以使用绑定变量,例如

DEFINE Project_Name = 'Test'
DEFINE SampleSet_Name = 'Test_SSet'

VAR Project_Schema varchar2(50)
VAR SampleSet_ID number


begin
  SELECT SCHEMA 
    INTO :Project_Schema 
    FROM PROJECTINFO 
   WHERE NAME = '&Project_Name';
end;
/
begin
  SELECT SS_ID 
    INTO :SampleSet_ID 
    from SAMPLESET 
   WHERE NAME = '&SampleSet_Name';
end;
/        

 --test the contents of the variable
Select :SampleSet_ID, :Project_Schema from dual;

您可以为此使用动态SQL。不过,请尝试一下,若SAMPLESET位于名称位于:Project_Schema变量中的表中,那个么如何访问它?我的意思是W_TEST_000.SAMPLESET,如果我键入Select:Project_Schema.SAMPLESET。。它不起作用。嗨@Alexander,这个答案解决了你的问题吗?你能把问题标记为已回答,把答案标记为已接受吗?这将有助于增加我们的分数=)你能更具体地说明你想要什么吗?在您的示例中,SAMPLESET是一个表,它位于project_模式中的一个表中,这意味着什么?很抱歉造成这种混淆。。请看我文章的最后一部分-现在我必须从表
W\u TEST\u 000中进行选择。我的表
但是变量
Project\u Schema
中有
W\u TEST\u 000
。因此,我需要执行如下操作:
从:Project\u Schema.MY\u表中选择名称,其中SS\u ID=:SampleSet\u ID
。我的问题是-如何正确地编写此请求(在
FROM
之后的部分)?您可以使用ref游标,也可以只使用动态SQL
执行立即“SELECT NAME FROM'| |:PROJECT|u SCHEMA'| |'。My_表,其中SS|u ID=:SampleSet|ID'使用:SampleSet|u ID
DEFINE Project_Name = 'Test'
DEFINE SampleSet_Name = 'Test_SSet'

VAR Project_Schema varchar2(50)
VAR SampleSet_ID number


begin
  SELECT SCHEMA 
    INTO :Project_Schema 
    FROM PROJECTINFO 
   WHERE NAME = '&Project_Name';
end;
/
begin
  SELECT SS_ID 
    INTO :SampleSet_ID 
    from SAMPLESET 
   WHERE NAME = '&SampleSet_Name';
end;
/        

 --test the contents of the variable
Select :SampleSet_ID, :Project_Schema from dual;