动态ORACLE SQL-如何将varchar2变量转换为select语句中的列名?
我需要将一个varchar2(30)变量转换为select语句中的列名或应该接收列名的sql函数中的列名 我该怎么做 我试图用动态sql做一些简单的事情,比如下面的代码,来解决varchar2转换的问题,但是我不能得到预期的结果。关于查询字符串中的select语句,它显示“00900.00000-”无效SQL语句 有人知道臭虫在哪里吗动态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
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-“无效数字”*原因:*操作: