오라클의 쿼리에서 값을 전달하여 테이블에서 열 이름을 가져 오려고합니다. 대부분의 경우 - 우리는 그와 같은 쿼리를 작성합니다 - select * from table where column = 'value'.하지만 제 경우에는 열 이름을 모르겠습니다.오라클에 값을 전달하여 테이블에서 열 이름을 가져옵니다.
나를 제안 할 수 있습니까? 사전에 감사합니다 ...
오라클의 쿼리에서 값을 전달하여 테이블에서 열 이름을 가져 오려고합니다. 대부분의 경우 - 우리는 그와 같은 쿼리를 작성합니다 - select * from table where column = 'value'.하지만 제 경우에는 열 이름을 모르겠습니다.오라클에 값을 전달하여 테이블에서 열 이름을 가져옵니다.
나를 제안 할 수 있습니까? 사전에 감사합니다 ...
select table_name from user_Tables where table_name = 'bogus';
'Maria'와 같은 가치가 있고 오라클 데이터베이스에서 열 이름과 테이블 이름을 검색하고 싶습니다. – MakDeveloper
당신은 DB의 모든 테이블을 확인하는 동적 쿼리를 작성하려고 할 수 있습니다.
설정 :
create table tab1 (v1 varchar2(100), n1 number, v1b varchar2(100));
create table tab2 (v2 varchar2(100), n2 number, v2b varchar2(100));
create table tab3 (v3 varchar2(100), n3 number, v3b varchar2(100));
insert into tab1 values ('Maria', 1, 'aa');
insert into tab1 values ('xx', 2, 'bb');
insert into tab2 values ('yy', 3, 'Maria');
insert into tab2 values ('zz', 3, 'cc');
insert into tab3 values ('WW', 4, 'DD');
동적 쿼리 작성 :
select 'select table_name,
matches from (' || listagg(statement, ' UNION ALL ') within group (order by table_name) || ')
where matches > 0'
from (
select 'select ''' || table_name ||
''' as TABLE_NAME, count(1) as MATCHES from ' || table_name || ' WHERE ' ||
listagg(column_name || ' = ''Maria''', ' OR ') within group (order by column_name) as statement,
table_name
from user_tab_columns col
where data_type = 'VARCHAR2'
group by table_name
)
이것은 모든 테이블을 확인하기 위해 실행할 수있는 쿼리를 반환됩니다; 줄 것이다
SELECT table_name, matches
FROM (SELECT 'TAB1' AS TABLE_NAME, COUNT(1) AS MATCHES
FROM TAB1
WHERE V1 = 'Maria'
OR V1B = 'Maria'
UNION ALL
SELECT 'TAB2' AS TABLE_NAME, COUNT(1) AS MATCHES
FROM TAB2
WHERE V2 = 'Maria'
OR V2B = 'Maria'
UNION ALL
SELECT 'TAB3' AS TABLE_NAME, COUNT(1) AS MATCHES
FROM TAB3
WHERE V3 = 'Maria'
OR V3B = 'Maria')
WHERE matches > 0;
이 쿼리를 실행 : 내 예를 들어,이 쿼리 (포맷되지 않음)를 구축 할 것입니다
TABL MATCHES
---- ----------
TAB1 1
TAB2 1
내가 USER_TAB_COLUMNS
을 사용하는 것을 알 제발, 따라서 로그인의 테이블에서만 검색 개요; 다른 스키마에서 검색하려면 사용자의 권한과 사용자의 권한에 따라 ALL_TAB_COLUMNS
또는 DBA_TAB_COLUMNS
을 사용할 수 있습니다. 더 많은 것을 위해 here을보십시오.
또한 USER_TAB_COLUMNS
은 테이블과 뷰의 열을 가져옵니다.
SQL> create view vTab1 as select * from tab1;
View created.
SQL> select count(1)
2 from user_tab_columns
3 where table_name = 'VTAB1';
COUNT(1)
----------
3
SQL> select count(1)
2 from user_tab_columns
3 inner join user_tables using(table_name)
4 where table_name = 'VTAB1';
COUNT(1)
----------
0
SQL>
선택 : 당신이 테이블로 검색을 제한하려면 전체 또는 DBA 테이블을 사용하기로 결정하면, 당신은
USER_TAB_COLUMNS
(ALL_TAB_COLUMNS
,DBA_TAB_COLUMNS
)에USER_TABLES
(ALL_TABLES
,DBA_TABLES
)TABLE_NAME
에 의해, 또는TABLE_NAME
및OWNER
에 가입하실 수 있습니다 * from user_tables –user_tables에서 table_name을 (를) 선택하십시오. 여기서 table_name = 'school_master'; –
'Maria'와 같은 값을 갖고 있으며 Oracle 데이터베이스에서 열 이름과 테이블 이름을 검색하려고합니다. – MakDeveloper