1.我有一个2000个表的oracle数据库,每个表中都有若干个类型为char(20)的字段.
现在我有一个主键,这个主键是某个表中某个类型为char(20)的字段的值,那么请问如何通过一个存储过程或者函数把这个主键传进去,得到这个主键在哪个表的哪个字段上?
注: 此主键 是全数据库中唯一的.
现在我有一个主键,这个主键是某个表中某个类型为char(20)的字段的值,那么请问如何通过一个存储过程或者函数把这个主键传进去,得到这个主键在哪个表的哪个字段上?
注: 此主键 是全数据库中唯一的.
解决方案 »
- oralce报表问题,欢迎大家来指导,谢谢*****
- SQL脚本中判断数据是否存在的问题
- 查看表中包括blob字段在内的未被delete的记录的大小
- sql server 和 oracle 是大多公司都在用的两种数据库么?
- oracle二次开发和java web哪个更有前途?
- 不知道有没有好办法?
- 请问Oracle怎么将 十进制和十六进制之间进行转换?谢谢!
- oracle8.05 一存储过程语句错误,怎么从备份语句中单独恢复这一个存储过程,在线等待
- 如何记录单据改变的记录步骤?
- 求助oarcle8i在 redhat7.3上的安装问题
- 求一条sql语句(php操作oracle方面的)
- 修改sga_max_size时报错,详情见内,这是什么原因
create table tablenames
(
tablename varchar(50)
)
insert into tablenames values('tableA');
select tablename from tablenames;
也就是说表名的列表可以从这个tablenams表中查到
FROM USER_CONS_COLUMNS
WHERE CONSTRAINT_NAME = UPPER('BJ_GWZBWH')
但我要的不是列名,而是列值呀
就是说有这个主键 值 是位于某个表某个行上的一列值.
比如 有一个表 tab
create table tab
(
pname char(20)
)
insert into tab (pname ) values('1234567891234567891');那么我要找一个的主键为 '1234567891234567891'
就找到了tab 表的 pname 列.
这一列并不一定是主键列.
一个是我的要选的表都在tablenames中定义了.
二是我的类型定死了,就是char(20)的.
所以能范围小多了.
大致过程我想象出来,不会写.
比如如何 判断 某个字段是char(20)类型,
如何判断那个字段的值和我这个主键是否相等.
如何得到某个表所有的名?
这个是什么意思
create table tablenames
(
tablename varchar(50)
)
insert into tablenames values('tableA');
insert into tablenames values('tableB');
只要遍历tablenames表里的表名就可以了.
如遍历上面的
tableA
tableB
不需要从从系统视图中查有哪些表
as
v_count number;
begin
for cur1 in (select table_name,column_name from user_tab_cols a where data_type='CHAR' and data_length=20
and exists (select 1 from tablenames where upper(tablename)=a.table_name)
and exists ( select 1
from user_constraints c,user_cons_columns col
where c.constraint_name=col.constraint_name
and c.constraint_type='P' and col.table_name=a.table_name and col.column_name=a.column_name ))
loop
execute immediate 'select count(1) from '||cur1.table_name||' where '||cur1.column_name||'='''||keyword||'''' into v_count;
if v_count>0 then
dbms_output.put_line('The tablename is '||cur1.table_name||' and the column is '||cur1.column_name);
return;
end if;
end loop;
dbms_output.put_line('couldn''t found the column');
end proc;
proc('XXX');--传入你说的主键值,output出检索的结果
end;