oracle数据库怎样查询用变量表示的字段名?

例如表中我有字段c01,c02,c03,,,c100,,, 查询的结果是不确定的 比如我传入一个变量02 就select c02 from table ,变量100 就select c100 from table 应该怎么写啊

我的做法是:
a.sql是静态的,一个语句无法实现多种功能。需要一个动态变化的语句。
b.pl/sql可以生成动态语句,但是无法直接select 出结果。
如:
create or replace procedure selectx
( v_field_nam in varchar2
)
is
begin
execute immediate 'select '|| v_field_nam ||' from dual ';
end selectx;
/

c.利用'&' 的值替换功能,也可以实现你要的效果,
例如:

--1.建立测试表:
create table t_mytable
(
c1
number
,c2
number
);
--2插入样本数据:
insert into t_mytable
select 1 , 2 from dual;
commit;

insert into t_mytable
select 3 , 4 from dual;
commit;

pzw> select * from t_mytable;
1
2
3
4

--带输入参数的sql语句:
pzw> select c&num from t_mytable;
Enter value for num: 1
old
1: select c&num from t_mytable
new
1: select c1 from t_mytable

1

3

2 rows selected.

pzw> select c&num from t_mytable;
Enter value for num: 2
old
1: select c&num from t_mytable
new
1: select c2 from t_mytable

2

4

2 rows selected.
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-14

可以使用case语句

select case when '&A' = 'A' then A列 when '&A' = 'B' then B列,
           when A列 when '&A' = 'C' then C列 ELSE D列 end
  from 表名;

如果变量里的值不定的话,就没有办法了。

第2个回答  2015-07-20
直接用动态SQL就可以了,写一个过程或者函数来封装就可以了

oracle数据库怎样查询用变量表示的字段名?
我的做法是:a.sql是静态的,一个语句无法实现多种功能。需要一个动态变化的语句。b.pl\/sql可以生成动态语句,但是无法直接select 出结果。如:create or replace procedure selectx ( v_field_nam in varchar2 )is begin execute immediate 'select '|| v_field_nam ||' from dual ';end sele...

ORACLE语句,将字符串和变量拼起来的内容当字段名和表名
第一:pabsme_t_mindate 表里面有几个字段?如果就两个字段,那还好,如果有2个以上字段,写的语句不对:insert into pabsme_t_mindate select min(data_date),'sme.qq'||(select en_t_name from pabsme_vw_table where serial_number=t_number);第二:在select语句中,第二个查询字段...

Oracle存储过程中如何把表名写在变量里面进行查询该表?
create or replace procedure p_XX(tabName in varchar2) is type t_cursor is ref cursor;v_cursor t_cursor;v_SQLStatement varchar2(300);begin v_SQLStatement = 'select xx from '||tabName ;open v_cursor for v_SQLStatement;loop fetch v_cursor into XXX;exit when v_cur...

如何用oracle动态查询一张表里面的某些列?
define_variable是用于存放被选出的字段值的变量,record是用户定义或%ROWTYPE类型的记录,用来存放被选出的行记录。输入bind_argument参数是一个表达式,它的值将被传入(IN模式)或传出(OUT模式)或先传入再传出(IN OUT模式)到动态SQL语句或是PL\/SQL块中。一个输出bind_argument参数就是一个能保存动态...

oracle数据库中SID到底什么意思?怎么用?
SID的意思是oracle数据库的唯一标识符是你在建立一个数据库时系统自动赋予的一个初始ID。SID主要用于在一些DBA操作以及与操作系统交互,从操作系统的角度访问实例名,必须通过ORACLE SID,且它在注册表中也是存在的。

oracle 中字段作为变量的语句怎么写
a (a1,b1)values("a1",'');对于这种情况,因为表里存的是'',其实是没有内容的,要查询这个字段,不能直接使用 select from a where b1='';sql中判断非空不能用等号,因为null在sql中被看作特殊符号,必须使用关键字 is和not 应该如此使用:select from a where b1 is null 或者:select fr...

Oracle怎么对IN子查询使用绑定变量
数字列表函数 [java] view plain copy create or replace function str2numList( p_string in varchar2 ) return numTableType as v_str long default p_string || ',';v_n number;v_data numTableType := numTableType();begin loop v_n := to_number(instr( v_str,

在oracle中,怎么将select 字段以变量的形式传进去?
ndeclare v_field_nam varchar2(100);a varchar2(20);b varchar2(20)begin v_field_nam:=‘a,b’;execute immediate 'select ' || v_field_nam|| ' into a,b from C where rownum=1';dbms_output.put_line(a||'--'||b);end ;这样就输出结果了 ...

oracle中怎么判断查询的列中是否包含字母?
在Oracle中,判断查询结果中的列是否包含字母,可以使用正则表达式函数regexp_like。具体操作如下:执行以下SQL语句:SELECT CASE WHEN REGEXP_LIKE(字段名, '.([a-z]+|[A-Z])') THEN '包含字母' ELSE '不包含字母' END FROM 表名字;这里的正则表达式关键在于第二个参数:'.([a-z]+|[A-Z...

oracle查询表名为一个变量怎么写
简单来说,就是你一个存储过程当中创建了一个表table_a,然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候 table_a还不存在,过程就会显示有编译错误。因为table_a不存在必然导致过程无法执行,所以无法编译成功,而把insert into语句加如到execute immediate之后,则...

相似回答