Skip to content

Commit 002fca8

Browse files
yahondaclaude
andcommitted
Add test for TABLE OF %ROWTYPE parameter in package
Reproduces the issue reported in #200 where ensure_tmp_tables_created generates invalid DDL containing %ROWTYPE literally. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 39cf870 commit 002fca8

1 file changed

Lines changed: 34 additions & 1 deletion

File tree

spec/plsql/procedure_spec.rb

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1508,7 +1508,6 @@ def new_candidate(status)
15081508
before(:all) do
15091509
# get actual database_version
15101510
plsql.connect! CONNECTION_PARAMS
1511-
skip "Skip if the actual database version is 18c or higher" if (plsql.connection.database_version <=> [18, 0, 0, 0]) >= 0
15121511
end
15131512

15141513
before do
@@ -2385,3 +2384,37 @@ def new_candidate(status)
23852384
expect { plsql.test_func(p_STRING: "xxx") }.not_to raise_error
23862385
end
23872386
end
2387+
2388+
describe "Function with TABLE OF %ROWTYPE parameter defined in package" do
2389+
before(:all) do
2390+
plsql.connect! CONNECTION_PARAMS
2391+
plsql.execute "DROP PACKAGE test_rowtype_pkg" rescue nil
2392+
plsql.execute "DROP TABLE test_rowtype_tbl" rescue nil
2393+
plsql.execute "CREATE TABLE test_rowtype_tbl (id NUMBER, name VARCHAR2(50))"
2394+
plsql.execute <<-SQL
2395+
CREATE OR REPLACE PACKAGE test_rowtype_pkg IS
2396+
TYPE t_tab IS TABLE OF test_rowtype_tbl%ROWTYPE;
2397+
FUNCTION test_fn(p_tab IN t_tab) RETURN NUMBER;
2398+
END;
2399+
SQL
2400+
plsql.execute <<-SQL
2401+
CREATE OR REPLACE PACKAGE BODY test_rowtype_pkg IS
2402+
FUNCTION test_fn(p_tab IN t_tab) RETURN NUMBER IS
2403+
BEGIN
2404+
RETURN p_tab.COUNT;
2405+
END;
2406+
END;
2407+
SQL
2408+
end
2409+
2410+
after(:all) do
2411+
plsql.execute "DROP PACKAGE test_rowtype_pkg" rescue nil
2412+
plsql.execute "DROP TABLE test_rowtype_tbl" rescue nil
2413+
plsql.logoff
2414+
end
2415+
2416+
it "should execute function with TABLE OF %ROWTYPE parameter" do
2417+
result = plsql.test_rowtype_pkg.test_fn([{id: 1, name: "test"}])
2418+
expect(result).to eq(1)
2419+
end
2420+
end

0 commit comments

Comments
 (0)