在 PL SQL 中使用 varray 作为常量

Posted

技术标签:

【中文标题】在 PL SQL 中使用 varray 作为常量【英文标题】:Using varray as a constant in PL SQL 【发布时间】:2013-10-11 06:15:33 【问题描述】:

是否可以在 PL SQL 中使用字符串的可变数组作为常量以及如何使用?例如,我在 PL SQL 中创建了一个 CRUD 矩阵构建器,它适用于这种代码:

        v_check := INSTR2(v_string_fnc, 'DROP ');
string_to_parse := v_string_fnc;

  WHILE v_check > 0 LOOP
            v_check := INSTR2(string_to_parse, 'DROP ');
                            IF v_check > 0 THEN
                            v_check := INSTR2(string_to_parse, 'TABLE ', v_check) + 6;
                            result_table := SUBSTR(string_to_parse, v_check);
                            string_to_parse := result_table;
                            result_table := RTRIM(SUBSTR(result_table, 0, INSTR(result_table, ' ')));
                            table_indx := result_table;
                            tab_res(table_indx).table_ := result_table;
                            tab_res(table_indx).delete_ := 'D';
                            end if;
                            end loop;

与此类似的是所有其他命令。 现在我想知道如何做到这一点,而不是为每个操作单独设置一个块,以便在命令类似于“DROP TABLE”、“INSERT INTO”、“DELETE FROM”的情况下制作单个块。 制作一个

的可变数组
      commands := ( 'DROP TABLE ',  'INSERT INTO ', 'DELETE FROM ');

然后是这样的:

For i in 1..commands.length() loop
    v_check := instr2(string_to_parse, commands(i));
    v_check := INSTR2(string_to_parse, ' ', v_check) + 2;
  result_table := SUBSTR(string_to_parse, v_check);
  string_to_parse := result_table;
  result_table := RTRIM(SUBSTR(result_table,
                               0,
                               INSTR(result_table, ' ')));
  table_indx := result_table;
  tab_res(table_indx).table_ := result_table;

【问题讨论】:

【参考方案1】:

试试这个:

DECLARE
  TYPE my_varray_t IS VARRAY(10) OF VARCHAR2(100);
  v_my_varray my_varray_t :=
    my_varray_t('DROP TABLE ', 'INSERT INTO ', 'DELETE FROM');
BEGIN
  FOR v_i IN 1..v_my_varray.COUNT
  LOOP
    dbms_output.put_line(v_my_varray(v_i));
  END LOOP;
END;

不确定 - 这是您需要的吗?

【讨论】:

以上是关于在 PL SQL 中使用 varray 作为常量的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL数组

如何通过 PL/SQL 中的 VARRAY 函数中的变量传递字符串值

Oracle:PL/SQL 中查看值是不是存在的最快方法:列表、VARRAY 或临时表

Oracle PL/SQL:如何从 VARRAY 的 REF 中进行 DEREF?

我可以直接从用户接受 PL/SQL 中 VARRAY 中的值吗?

SQL记录-PLSQL数组