oracle 根据值找字段
2011-12-01 15:36
253 查看
在sql中我们经常 用 where field='XXXX' 来判断获取特定数据。
在一次项目中遇到了个比较奇怪的问题,需要根据值来反向检索字段,即是否有字段存在特定的值。想来想去好像没办法用一个sql实现于是写了个存储过程简单实现。
其实可以写得很强大,但就是懒---能实现功能就好。代码如下。
-- 反向判断:判断指定表是否有存在 特定值的字段(该表主键写死掉punid,哈哈业务是这样有需要可以改成动态的)
CREATE OR REPLACE PROCEDURE "P_FINDCOLUMNSBYVALUE"
(
retVal out integer, --返回是否存在 1存在,0不存在
unid in varchar2, --主键
inTableName in varchar2, --表名
inValue in varchar2 --值
)
as
tmp_columns varchar2(100); --表的字段名
IS_EXIST NUMBER; --数据是否存在
tmp_sql char(150);
begin
retVal := 0;
declare cursor c_tmp is SELECT t.COLUMN_NAME FROM user_tab_columns t WHERE t.TABLE_NAME= inTableName and t.DATA_TYPE='VARCHAR2';
begin
open c_tmp;
loop
fetch c_tmp into tmp_columns;
tmp_sql := 'select count(*) from '||inTableName||' where '||tmp_columns||' = '''||inValue||''' and punid = '''||unid||'''';
DBMS_OUTPUT.PUT_LINE(tmp_sql);
execute immediate tmp_sql into IS_EXIST;
DBMS_OUTPUT.PUT_LINE(IS_EXIST);
IF (IS_EXIST != 0) THEN
retVal := 1;
exit;
end if;
exit when c_tmp%NOTFOUND;
end loop;
close c_tmp; --关闭游标
end;
end;
在一次项目中遇到了个比较奇怪的问题,需要根据值来反向检索字段,即是否有字段存在特定的值。想来想去好像没办法用一个sql实现于是写了个存储过程简单实现。
其实可以写得很强大,但就是懒---能实现功能就好。代码如下。
-- 反向判断:判断指定表是否有存在 特定值的字段(该表主键写死掉punid,哈哈业务是这样有需要可以改成动态的)
CREATE OR REPLACE PROCEDURE "P_FINDCOLUMNSBYVALUE"
(
retVal out integer, --返回是否存在 1存在,0不存在
unid in varchar2, --主键
inTableName in varchar2, --表名
inValue in varchar2 --值
)
as
tmp_columns varchar2(100); --表的字段名
IS_EXIST NUMBER; --数据是否存在
tmp_sql char(150);
begin
retVal := 0;
declare cursor c_tmp is SELECT t.COLUMN_NAME FROM user_tab_columns t WHERE t.TABLE_NAME= inTableName and t.DATA_TYPE='VARCHAR2';
begin
open c_tmp;
loop
fetch c_tmp into tmp_columns;
tmp_sql := 'select count(*) from '||inTableName||' where '||tmp_columns||' = '''||inValue||''' and punid = '''||unid||'''';
DBMS_OUTPUT.PUT_LINE(tmp_sql);
execute immediate tmp_sql into IS_EXIST;
DBMS_OUTPUT.PUT_LINE(IS_EXIST);
IF (IS_EXIST != 0) THEN
retVal := 1;
exit;
end if;
exit when c_tmp%NOTFOUND;
end loop;
close c_tmp; --关闭游标
end;
end;
相关文章推荐
- oracle查询 根据某个字段不包含某个值查询
- oracle根据表名生成select 所有字段 from 表名的语句
- Oracle 中 根据值 查询 所在 表和字段
- Oracle根据多个字段进行查重
- Oracle中如何根据一个字段查询是否有符合条件的记录
- ORACLE 根据字段返回拼接数据
- oracle根据表明查询表字段结构
- oracle根据Date字段查询区间数据(转)
- Oracle 根据字段查询相关表名
- oracle如何根据一个字段的结果判断另外一个字段?(CASE WHEN THEN ELSE END语句)
- Oracle字段根据逗号分割查询数据
- Oracle 根据字段条件显示不同字段
- oracle根据某个字段去重查询实例
- ORACLE 根据上表不同的字段值的统计
- Oracle根据字段值找到表名和列名
- oracle plsql 根据 值 查询 在某个表,某个字段 和 sql server 中根据 值 查询 在某个表某个字段
- oracle 根据表名查询字段的详细信息 字段类型 注释
- mysql、oracle、sqlserver根据对应的表查询表中的所有字段名称、类型、别名、长度等信息
- Oracle根据字段值找到表名和列名
- Oracle字段根据逗号分割查询数据的方法