【问题标题】:how do I execute a function from TOAD for Oracle and bind the result to a data grid如何从 TOAD for Oracle 执行函数并将结果绑定到数据网格
【发布时间】:2025-12-12 05:10:02
【问题描述】:

我有一个函数,它的参数之一是 pl/sql 对象的 VARRAY。如何执行此存储过程并将其返回的结果集绑定到 TOAD for Oracle 中的数据网格?

【问题讨论】:

    标签: oracle plsql toad


    【解决方案1】:

    经过一番搜索,我找到了自己问题的答案。假设您的可变数组类型称为 varchar_pair_array,而存储在此数组中的对象称为 varchar_pair_object。 varchar_pair_object 是一个简单的对象,它有两个 varchar 作为它的成员。

    下面是执行一个 proc 的代码,该 proc 接受一个 varchar_pair_object (s) 的 varray:

    DECLARE 
      RetVal SYS_REFCURSOR;
      a_simplevalue VARCHAR2(200);
      another_simplevalue VARCHAR2(200);
      my_array_of_varchar_pairs VARCHAR_PAIR_ARRAY; -- assume varchar_pair_array is defined somewhere else
      my_obj VARCHAR_PAIR_OBJECT; -- assume varchar_pair_object is defined somewhere else
      my_other_obj VARCHAR_PAIR_OBJECT;
    BEGIN 
      a_simplevalue := 'hello';
      another_simplevalue := 'there';
      my_obj := VARCHAR_PAIR_OBJECT('nice to meet you', 'greetings');
      my_other_obj := VARCHAR_PAIR_OBJECT('goodbye', 'ciao');
      my_array_of_varchar_pairs := VARCHAR_PAIR_ARRAY(); 
      my_array_of_varchar_pairs.EXTEND(2); -- this should be the number of objects you plan to put into the array
      my_array_of_varchar_pairs(1) := my_obj;
      my_array_of_varchar_pairs(2) := my_other_obj; 
    
      RetVal := my_function ( a_simplevalue, another_simplevalue, my_array_of_varchar_pairs); -- assuming your array takes two varchars and one array of VARCHAR_PAIR_OBJECT (s)
      :to_grid := RetVal;
    
    END;
    

    将此代码复制粘贴到 TOAD 的 sql 编辑器中并更改它以适应您的功能和类型,然后按 F9。 TOAD 会询问您 :to_grid 变量的类型。选择光标(假设您的函数返回一个参考光标)并按回车键。 TOAD 将结果集绑定到数据网格。

    对我有帮助的链接:

    http://www.smart-soft.co.uk/Oracle/oracle-plsql-tutorial-part-11.htm(关于收藏的好教程) http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/10_objs.htm#1972(在这种情况下特别有用的是关于声明和初始化对象的部分)

    只需很少的更改,就可以通过程序完成相同的操作。

    【讨论】:

    • 还可以查看模式浏览器中的“执行过程”功能。它有一个选项可以在执行后将引用游标结果加载到网格中。它还有一个优点是它会记住您上次执行该过程时使用的参数。
    • 问题在于,对于复杂类型,例如 varray 和对象,它不会(不能?)为复杂类型生成 sql,您需要自己初始化它们。
    • 没错,但这就是为什么它允许您在执行代码之前对其进行编辑:)
    • 是的。事实上,大部分代码是 TOAD 从执行过程中生成的。我只是不知道如何编辑该代码以传入一个对象数组,这就是我最初在这里问这个问题的原因。谢谢。