@@ -2426,3 +2426,69 @@ def new_candidate(status)
24262426 expect ( field_names . none? { |name | name . to_s . start_with? ( "sys_nc" ) } ) . to be true
24272427 end
24282428end
2429+
2430+ describe "Function with TABLE OF %ROWTYPE parameter defined in package" do
2431+ before ( :all ) do
2432+ plsql . connect! CONNECTION_PARAMS
2433+ plsql . execute "DROP PACKAGE test_rowtype_pkg" rescue nil
2434+ plsql . execute "DROP TABLE test_rowtype_tbl" rescue nil
2435+ plsql . execute "CREATE TABLE test_rowtype_tbl (id NUMBER, name VARCHAR2(50))"
2436+ plsql . execute <<-SQL
2437+ CREATE OR REPLACE PACKAGE test_rowtype_pkg IS
2438+ TYPE t_tab IS TABLE OF test_rowtype_tbl%ROWTYPE;
2439+ FUNCTION test_fn(p_tab IN t_tab) RETURN NUMBER;
2440+ END;
2441+ SQL
2442+ plsql . execute <<-SQL
2443+ CREATE OR REPLACE PACKAGE BODY test_rowtype_pkg IS
2444+ FUNCTION test_fn(p_tab IN t_tab) RETURN NUMBER IS
2445+ BEGIN
2446+ RETURN p_tab.COUNT;
2447+ END;
2448+ END;
2449+ SQL
2450+ end
2451+
2452+ after ( :all ) do
2453+ plsql . execute "DROP PACKAGE test_rowtype_pkg" rescue nil
2454+ plsql . execute "DROP TABLE test_rowtype_tbl" rescue nil
2455+ plsql . logoff
2456+ end
2457+
2458+ it "should execute function with TABLE OF %ROWTYPE parameter" do
2459+ result = plsql . test_rowtype_pkg . test_fn ( [ { id : 1 , name : "test" } ] )
2460+ expect ( result ) . to eq ( 1 )
2461+ end
2462+ end
2463+
2464+ describe "Function with TABLE OF RECORD parameter defined in package (workaround for %ROWTYPE)" do
2465+ before ( :all ) do
2466+ plsql . connect! CONNECTION_PARAMS
2467+ plsql . execute "DROP PACKAGE test_record_pkg" rescue nil
2468+ plsql . execute <<-SQL
2469+ CREATE OR REPLACE PACKAGE test_record_pkg IS
2470+ TYPE t_rec IS RECORD (id NUMBER, name VARCHAR2(50));
2471+ TYPE t_tab IS TABLE OF t_rec;
2472+ FUNCTION test_fn(p_tab IN t_tab) RETURN NUMBER;
2473+ END;
2474+ SQL
2475+ plsql . execute <<-SQL
2476+ CREATE OR REPLACE PACKAGE BODY test_record_pkg IS
2477+ FUNCTION test_fn(p_tab IN t_tab) RETURN NUMBER IS
2478+ BEGIN
2479+ RETURN p_tab.COUNT;
2480+ END;
2481+ END;
2482+ SQL
2483+ end
2484+
2485+ after ( :all ) do
2486+ plsql . execute "DROP PACKAGE test_record_pkg" rescue nil
2487+ plsql . logoff
2488+ end
2489+
2490+ it "should execute function with TABLE OF RECORD parameter" do
2491+ result = plsql . test_record_pkg . test_fn ( [ { id : 1 , name : "test" } ] )
2492+ expect ( result ) . to eq ( 1 )
2493+ end
2494+ end
0 commit comments