Oracle 错误00904 PLSQL Select语句中WHERE子句的标识符无效

Oracle 错误00904 PLSQL Select语句中WHERE子句的标识符无效,oracle,plsql,Oracle,Plsql,我试图构造一个SELECT语句并执行它,但我一直有这个错误。我的声明是这样的: DECLARE SOMESTRING varchar2(20); BEGIN SOMESTRING := 'Test_Col'; EXECUTE IMMEDIATE 'SELECT * FROM TBL_TEST WHERE column = ' || SOMESTRING; 我有一个00904。00000-%s:无效标识符。我知道这一定是语法错误,但我不确定应该写什么,因为我是PL/SQL新手

我试图构造一个SELECT语句并执行它,但我一直有这个错误。我的声明是这样的:

DECLARE
   SOMESTRING varchar2(20);
BEGIN
   SOMESTRING := 'Test_Col';
   EXECUTE IMMEDIATE 'SELECT * FROM TBL_TEST WHERE column = ' || SOMESTRING;
我有一个00904。00000-%s:无效标识符。我知道这一定是语法错误,但我不确定应该写什么,因为我是PL/SQL新手

编辑:

我试过这个:

EXECUTE IMMEDIATE 'SELECT col FROM TBL_TEST WHERE aColumn = '''Literal_String''' into TEST_VALUE;
它正确地打印出值,但当我这样做时:

EXECUTE IMMEDIATE 'SELECT col FROM TBL_TEST WHERE aColumn = :SOMESTRING' INTO TEST_VALUE USING SOMESTRING;
上面说没有数据。是的,我已经声明了所有必要的变量

编辑2:

在我的应用程序中,我将一些字符串分配给:

SOMESTRING := CONCAT('A', SUBSTR(a_table_name, 2));
在这种情况下,如何在这种情况下进行三重报价?因为它将变成一个文本字符串。

使用以下命令:

DECLARE
   SOMESTRING varchar2(20);
BEGIN
   SOMESTRING := 'Test_Col';
   EXECUTE IMMEDIATE 'SELECT col1 FROM TBL_TEST WHERE column = :SOMESTRING' using SOMESTRING;
END;
编辑:

解释:

下面的方框显示了您试图传递的值。 如果您看到第一条语句,您将看到您正在传递带有“但在第二条语句中,当您将其作为bind varaible传递时,您将不传递它”的字符串文字。因此,您无法获得任何数据

declare
  v   varchar2(1000);
  SOMESTRING varchar2(20);
begin 

v:= 'SELECT col FROM TBL_TEST WHERE aColumn = ''literal_string''';
dbms_output.put_line (v);

SOMESTRING := 'Test_Col';
dbms_output.put_line (SOMESTRING);
v:='SELECT col FROM TBL_TEST WHERE aColumn = :SOMESTRING';
dbms_output.put_line (v);

end;
输出:

SELECT col FROM TBL_TEST WHERE aColumn = 'literal_string'
SELECT col FROM TBL_TEST WHERE aColumn = :SOMESTRING

SELECT col FROM TBL_TEST WHERE aColumn = 'literal_string'
Test_Col
SELECT col FROM TBL_TEST WHERE aColumn = :SOMESTRING
补救措施:

while assiging `SOMESTRING` do it as :

SOMESTRING := '''Test_Col''';

嗨,谢谢。它起作用了。如果我想将select语句的结果放入一个声明的整数变量中,怎么样?@loveprogramming然后需要使用into子句来保存查询结果。请看我的编辑,谢谢。无论如何,由于某种原因,我没有得到任何数据回来。上面说找不到数据,但我很确定里面有数据。@loveprogramming检查SQL中运行的独立查询。。检查它是否返回行。还请注意,如果查询返回多行或表的rowtype变量,则需要几个变量来保存结果。当我将文字字符串替换为:SOMETHING时,它会在select语句中返回值“a”。但是当我把它改回来时,它说没有数据。
while assiging `SOMESTRING` do it as :

SOMESTRING := '''Test_Col''';