如何从PL / SQL中的给定表中找出所有约束?

时间:2018-05-13 18:22:09

标签: sql database oracle plsql

我有一个程序,她把一个表作为参数,我必须写入一个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);

1 个答案:

答案 0 :(得分:0)

您只需查看Oracle Metadata表TABLE_NAME即可。 详情请见: https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022

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

我不确定您要将哪些内容放入SQL文件中,但如果您需要获取每个约束的DDL,请查看dbms_metadata.get_ddl() @Override public int getItemPosition(Object object) { super.getItemPosition(object); SharedPreferences pos = ctx.getSharedPreferences("forposition", MODE_PRIVATE); int tom = pos.getInt("pos",0); Log.d("posTom","value : "+tom ); return tom; }