programing

데이터베이스에 테이블이 있는지 확인 - PL SQL

batch 2023. 8. 14. 22:43
반응형

데이터베이스에 테이블이 있는지 확인 - PL SQL

저는 PL SQL 신입인데 서버에 테이블이 있는지 확인하고 떨어뜨려야 합니다.

잘 부탁드립니다, 고란 씨.

테이블 이름을 쿼리할 수 있습니다.

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
select tname from tab where tname = 'TABLE_NAME';

여기서 정보 스키마의 진정한 힘이 생깁니다.간단한 쿼리를 사용하면 올바른 방향으로 이동할 수 있습니다.

SELECT
  *
FROM
  information_schema.tables
WHERE
  table_name='salesorders';

그러면 이 기능을 plpg 함수에 사용할 수 있습니다.

CREATE OR REPLACE FUNCTION table_exists(v_table text)
  RETURNS boolean AS
$BODY$
  DECLARE
    v_count int;
    v_sql text;
BEGIN
  v_sql = 
    'SELECT ' ||
    '  count(1) ' ||
    'FROM ' ||
    '  information_schema.tables ' ||
    'WHERE ' ||
    E'  table_name=\'' || v_table || E'\'';

  EXECUTE v_sql INTO v_count;

  RETURN v_count>0;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
  COST 100;

함수 사용

select * from table_exists('salesordesrs');

그 정도면 충분히 갈 수 있을 겁니다.

OPS 제가 원래 포스터 질문을 잘못 읽은 것 같습니다.저는 Postgre를 위해 대답했습니다.SQL.

피터야.

가장 효율적인 방법은 하지 않는 것입니다.탁자를 내려놔요.테이블이 아직 존재하지 않는 경우 예외가 발생합니다.

테이블을 놓기 직전에 쿼리를 실행하는 것은 Oracle이 자동으로 수행하는 작업을 수행하는 데 시간을 낭비하는 것입니다.

예외는 원하는 대로 처리할 수 있습니다. 예:

BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE "MYTABLE"';
EXCEPTION
  WHEN OTHERS THEN
    IF SQLCODE = -942 THEN
      DBMS_OUTPUT.put_line('the table did not exist!');
    ELSE
      RAISE;
    END IF;
END;

제 DB가 트리 구조가 특이해서 위의 솔루션에 문제가 있었습니다.이렇게 하면 스키마의 모든 테이블이 표시됩니다.

SELECT
   table_name
FROM
   all_tables
WHERE
   table_name = '<your table here>'

언급URL : https://stackoverflow.com/questions/3525448/check-if-table-exists-in-the-database-pl-sql

반응형