Skip to content

Commit 4d8b9dd

Browse files
yahondaclaude
andcommitted
Add failing test for TABLE OF RECORD OUT parameter (rsim#203)
Reproduces the issue where calling a function with a TABLE OF RECORD OUT NOCOPY parameter fails with PLS-00306 on Oracle 18c+. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 412d59e commit 4d8b9dd

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

spec/plsql/procedure_spec.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2426,3 +2426,43 @@ def new_candidate(status)
24262426
expect(field_names.none? { |name| name.to_s.start_with?("sys_nc") }).to be true
24272427
end
24282428
end
2429+
2430+
describe "Function with TABLE OF RECORD OUT parameter defined in package" do
2431+
before(:all) do
2432+
plsql.connect! CONNECTION_PARAMS
2433+
plsql.execute "DROP PACKAGE test_out_record_pkg" rescue nil
2434+
plsql.execute <<-SQL
2435+
CREATE OR REPLACE PACKAGE test_out_record_pkg IS
2436+
TYPE rec_customer IS RECORD (
2437+
customer_id NUMBER(10),
2438+
name VARCHAR2(255)
2439+
);
2440+
TYPE tab_customer IS TABLE OF rec_customer;
2441+
FUNCTION get_customers(p_id IN NUMBER, p_customers OUT NOCOPY tab_customer) RETURN NUMBER;
2442+
END;
2443+
SQL
2444+
plsql.execute <<-SQL
2445+
CREATE OR REPLACE PACKAGE BODY test_out_record_pkg IS
2446+
FUNCTION get_customers(p_id IN NUMBER, p_customers OUT NOCOPY tab_customer) RETURN NUMBER IS
2447+
BEGIN
2448+
p_customers := tab_customer();
2449+
p_customers.EXTEND;
2450+
p_customers(1).customer_id := p_id;
2451+
p_customers(1).name := 'Test Customer';
2452+
RETURN 1;
2453+
END;
2454+
END;
2455+
SQL
2456+
end
2457+
2458+
after(:all) do
2459+
plsql.execute "DROP PACKAGE test_out_record_pkg" rescue nil
2460+
plsql.logoff
2461+
end
2462+
2463+
it "should call function with TABLE OF RECORD OUT NOCOPY parameter" do
2464+
result = plsql.test_out_record_pkg.get_customers(42)
2465+
expect(result[0]).to eq(1)
2466+
expect(result[1][:p_customers]).to eq([{ customer_id: 42, name: "Test Customer" }])
2467+
end
2468+
end

0 commit comments

Comments
 (0)