Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态ORACLE SQL-如何将varchar2变量转换为select语句中的列名?_Oracle_Variables_Varchar - Fatal编程技术网

动态ORACLE SQL-如何将varchar2变量转换为select语句中的列名?

动态ORACLE SQL-如何将varchar2变量转换为select语句中的列名?,oracle,variables,varchar,Oracle,Variables,Varchar,我需要将一个varchar2(30)变量转换为select语句中的列名或应该接收列名的sql函数中的列名 我该怎么做 我试图用动态sql做一些简单的事情,比如下面的代码,来解决varchar2转换的问题,但是我不能得到预期的结果。关于查询字符串中的select语句,它显示“00900.00000-”无效SQL语句 有人知道臭虫在哪里吗 SET serveroutput ON; declare TYPE pointer IS REF CURSOR; yo pointer; var var

我需要将一个varchar2(30)变量转换为select语句中的列名或应该接收列名的sql函数中的列名

我该怎么做

我试图用动态sql做一些简单的事情,比如下面的代码,来解决varchar2转换的问题,但是我不能得到预期的结果。关于查询字符串中的select语句,它显示“00900.00000-”无效SQL语句

有人知道臭虫在哪里吗

 SET serveroutput ON;
 declare
 TYPE pointer IS REF CURSOR;
 yo pointer;
 var varchar2(20);
 query_string varchar2(200);
 num number;

 begin
 var := 'WORKERS'; --should be the column name!
 query_string := 'select'||var||'from MY_TABLE where MY_TABLE.ID = 2';
 OPEN yo FOR query_string;
 LOOP
 FETCH yo into num;
 EXIT WHEN yo%NOTFOUND;
 dbms_output.put_line(num);
 END LOOP;
 END ;
 /
查询_字符串:='从MY_TABLE.ID=2'的MY_TABLE中选择'| | var | |'

SQL语句中的单词之间缺少所需的空格。您的SQL语句被解析为:

从MY_TABLE.ID=2的MY_TABLE中选择Workers

测试你自己:

SQL> SET serveroutput ON
SQL>
SQL> DECLARE
  2    var varchar2(20);
  3    query_string VARCHAR2(200);
  4  BEGIN
  5    var          := 'WORKERS'; --should be the column name!
  6    query_string := 'select'||var||'from MY_TABLE where MY_TABLE.ID = 2';
  7    dbms_output.put_line(query_string);
  8  END ;
  9  /
selectWORKERSfrom MY_TABLE where MY_TABLE.ID = 2

PL/SQL procedure successfully completed.

SQL>

您需要在
之间留有空格,从
中选择工作人员

请记住,在执行动态sql之前,始终使用DBMS\u输出测试它。

无论如何,请看下面的示例

SQL> variable yo REFCURSOR
SQL> DECLARE
  2      TYPE pointer IS REF CURSOR;
  3      yo pointer;
  4      var          VARCHAR2(20);
  5      query_string VARCHAR2(200);
  6      num          NUMBER;
  7    BEGIN
  8      var          := 'ENAME'; --should be the column name!
  9      query_string := 'select '||var||' from EMP where EMPNO = 7369';
 10      OPEN :yo FOR query_string;
 11  END ;
 12  /

PL/SQL procedure successfully completed.

SQL> print yo

ENAME
----------
SMITH

SQL>

停止做你正在做的事情,选择一本关于关系数据库的书,学习如何做关系数据库,然后重新设计数据库,这样你就不需要做任何类似的事情。什么语言?PL/SQL?检查一下:SQL语句中的单词之间需要有空格。请看我的答案。我以为问题已经解决了,但是出现了一个新的相关代码。上面的代码仅适用于表示“number”类型列的列名。对于表示Varchar类型列的列名,它会给我一个错误,如:错误报告:ORA-01722:número inválido ORA-06512:na linha 12 01722.00000-“无效数字”*原因:*操作: