2016-03-04 34 views
0

我在Oracle数据库表甲骨文 - 绑定变量在SELECT语句

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

SAMPLESET 
NAME   SS_ID 
-------------------------- 
Test_SSet  1049 
在我的SQL * Plus脚本

一个具有取代变量(直接设置或用户输入)

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

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

VAR Project_Schema varchar2(50) 
VAR SampleSet_ID number 

然后,我需要将SELECT语句的结果放入两个绑定变量

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

现在我需要同时使用:Project_Schema:SampleSet_ID在SELECT语句从W_TEST_000.MY_TABLE子表是这样的:

SELECT NAME FROM :Project_Schema.MY_TABLE WHERE SS_ID = :SampleSet_ID 

但是,这并不工作..(ORA-00903:无效的表名)

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

+0

您可以使用动态SQL这一点。尝试[执行语句](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm) –

回答

0

,如果你在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; 
+0

你变的作品,谢谢! – Alexander

+0

但是,如果SAMPLESET位于名称所在的表格中:Project_Schema变量,如何访问它?我的意思是W_TEST_000.SAMPLESET,然后如果我键入Select:Project_Schema.SAMPLESET ..它不起作用。 – Alexander

+0

嗨@Alexander,这个答案解决了你的问题吗?你能否将问题标记为答案并将答案标记为已接受?这将有助于增加我们的声誉点=) –