【问题标题】:How can I find out all constraints from an given table in PL/SQL? [duplicate]如何从 PL/SQL 中的给定表中找出所有约束? [复制]
【发布时间】:2018-10-23 11:03:39
【问题描述】:

我有一个将表作为参数的程序,我必须将该表中的所有详细信息(如列名、类型和约束)写入 sql 文件。这是我尝试过的(这是一个测试代码,只是为了了解如何打印所有信息):

v_cursor_id  := DBMS_SQL.OPEN_CURSOR;
  DBMS_SQL.PARSE(v_cursor_id , 'SELECT * FROM marks', DBMS_SQL.NATIVE);
  v_ok := DBMS_SQL.EXECUTE(v_cursor_id );
  DBMS_SQL.DESCRIBE_COLUMNS(v_cursor_id, v_total_coloane, v_rec_tab);

  v_nr_col := v_rec_tab.first;
  IF (v_nr_col IS NOT NULL) THEN
    LOOP
      DBMS_OUTPUT.PUT(v_rec_tab(v_nr_col).col_name);
      DBMS_OUTPUT.PUT(' ');
      v_tipColoana :=(v_rec_tab(v_nr_col).col_type);
      case v_tipColoana
           when 1 then  DBMS_OUTPUT.PUT('varchar2');
           when 2 then DBMS_OUTPUT.PUT('Number');
           when 12 then DBMS_OUTPUT.PUT('date');
           when 96 then DBMS_OUTPUT.PUT('CHAR');
      end case;
      EXIT WHEN (v_nr_col IS NULL);
    END LOOP;
  END IF;
  DBMS_SQL.CLOSE_CURSOR(v_cursor_id);

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案1】:

    您只需查看 Oracle 元数据表 ALL_CONSTRAINTS。 在此处查看详细信息: https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022

    您应该能够按TABLE_NAME 进行过滤,以查看表的所有约束,包括它们的类型。

    我不确定您想在 SQL 文件中添加什么,但如果您需要获取每个约束的 DDL,请查看 ALL_SOURCE 甚至 dbms_metadata.get_ddl()

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2010-12-04
      • 2023-04-04
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2016-09-04
      相关资源
      最近更新 更多