oracle - 在 Pro*C 中使用带有动态查询的`execute immediate bulk collect into`
问题描述
我正在尝试在 Pro*C 下批量收集动态查询,但我无法在 Internet 上找到任何关于此的示例。例如,对于像这样的简单查询select level, level + 100 from dual connect by level <= 100
,我想我应该这样做:
EXEC SQL BEGIN DECLARE SECTION;
char proc_query[LARGE_ENOUGH_QUERY_BUFFER_SZ];
TYPE sample_tbl_t IS TABLE OF number(10);
sample_tbl_t level;
sample_tbl_t level_100;
EXEC SQL END DECLARE SECTION;
char const example_query[] = "select level, level + 100 from dual connect by level <= 100";
memcpy(proc_query, example_query, sizeof(example_query));
EXEC SQL EXECUTE IMMEDIATE :proc_query BULK COLLECT INTO :level, :level_100;
...或类似的东西,但我不知道如何使用 and 的内容level
,level_100
如何知道返回的行数等等。我试图搜索有关它的信息,但到目前为止还没有运气。
解决方案
我不知道 Pro*C,但是 - 在 PL/SQL 中 - 这类似于:
SQL> set serveroutput on
SQL>
SQL> declare
2 TYPE sample_tbl_t IS TABLE OF number(10);
3 lvl sample_tbl_t;
4 lvl_100 sample_tbl_t;
5 begin
6 execute immediate 'select level, level + 100
7 from dual
8 connect by level <= 100' bulk collect into lvl, lvl_100;
9
10 dbms_output.put_line('lvl count = '|| lvl.count);
11 dbms_output.put_line('lvl100 count = '|| lvl_100.count);
12 end;
13 /
lvl count = 100
lvl100 count = 100
PL/SQL procedure successfully completed.
SQL>
此外,您的声明部分是错误的。将其与我的示例进行比较。
此外,您可能不应该命名 variables level
,它会误导读者(看起来像分层查询中的伪列)。
推荐阅读
- mongoose - 摩卡在包含承诺的“之前”之后没有继续,只是挂起
- python - 打印给定序列中相同频率的所有氨基酸
- mysql - SQL 问题。在一张桌子上找到爱好相同的两个人
- corda - 匿名用户可以访问区块链吗?
- python-3.x - 在没有 reset_index 的情况下向 pandas 缓慢添加新列
- mysql - mySQL - 显示每天的第一个和最后一个日志
- jsf - 可拖动的输入组件 PrimeFaces
- android - 如何通过 Scanner 将数据添加到 TableLayout?
- c# - 计数在文本文件中找到我的数组中的字符串的次数
- android - Android Studio Loaders 自 Android P (API 28) 起已被弃用?