- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以在 plsql 中执行动态 sql 并将结果返回到 sys_refcursor 中?到目前为止,我已经粘贴了我的尝试,但无法正常工作,这是我通过我的 java 应用程序遇到的错误
ORA-01006: bind variable does not exist ORA-06512: at "LIVEFIS.ERC_REPORT_PK", line 116 ORA-06512: at line 1
但这可能是java误解的东西,一切都可以编译得很好,所以我不确定。
procedure all_carers_param_dy (pPostcode in carer.postcode%type, pAge Number
,pReport out SYS_REFCURSOR) is
begin
declare
lsql varchar2(500) :='SELECT c.id FROM carer c, cared_for cf,carer_cared_for ccf '
||' where c.id = ccf.carer_id (+)'
||' AND cf.id (+) = ccf.cared_for_id';
begin
if pPostcode is not null and pAge <= 0 then
lsql := lsql||' AND c.postcode like ''%''|| upper(pPostcode)||''%''';
elsif pPostcode is null and pAge > 0 then
lsql := lsql||' AND ROUND((MONTHS_BETWEEN(sysdate,c.date_of_birth)/12)) = pAge';
elsif pPostcode is not null and pAge > 0 then
lsql := lsql ||' AND ROUND((MONTHS_BETWEEN(sysdate,c.date_of_birth)/12)) = pAge'
||' AND c.postcode like ''%''|| upper(pPostcode)||''%''';
end if;
execute immediate lsql
into pReport;
end;
end;
我是 plsql 新手,甚至是动态 sql 新手,因此任何帮助/建议将不胜感激。
再次感谢
乔恩
最佳答案
您必须绑定(bind)参数pAge
和pPostcode
。在动态 SQL 中,您可以在它们前面加上冒号 (:
)。如果您使用 EXECUTE IMMEDIATE
或 OPEN ... FOR
,您将通过位置绑定(bind)您的参数,这就是我在示例中将它们重命名为 :P1 和 :P2 的原因:
DECLARE
lsql VARCHAR2(500) := 'SELECT c.id
FROM carer c, cared_for cf, carer_cared_for ccf
WHERE c.id = ccf.carer_id (+)
AND cf.id (+) = ccf.cared_for_id';
BEGIN
IF pPostcode IS NULL THEN
lsql := lsql || ' AND :P1 IS NULL';
ELSE
lsql := lsql || ' AND c.postcode like ''%''|| upper(:P1)||''%''';
IF pPostcode pAge > 0 THEN
lsql := lsql || ' AND :P2 = ROUND((MONTHS_BETWEEN(sysdate,
c.date_of_birth)/12))';
ELSE
lsql := lsql || ' AND nvl(:P2, -1) <= 0';
END IF;
OPEN pReport FOR lsql USING pPostcode, pAge;
END;
注意:必须在编译时知道绑定(bind)变量的数量和位置,这就是我经常使用上面构造的原因(即使不使用参数,也将参数添加到其位置) 。向查询添加同义反复(如 AND :P1 IS NULL
)不会影响其解释计划。
关于sql - 在 SYS_REFCURSOR 中执行动态 sql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230428/
我会打电话 procedure或 function从 java 使用 JDBC . 在最佳实践和性能方面,最好使用 function返回 SYS_REFCURSOR或使用 procedure返回 SY
我可以使用普通游标的值打开 sys_refcursor 吗? create or replace procedure test(C1 out sys_refcursor) Lv_c1 as
我可以使用普通游标的值打开 sys_refcursor 吗? create or replace procedure test(C1 out sys_refcursor) Lv_c1 as
CREATE OR REPLACE PROCEDURE GetEmployeesInDept( c OUT SYS_REFCURSOR) 我有一个与上述存储过程相关的查询,也就是说,在定义光标
甲骨文 11g 这似乎比它应该的更难,所以我可能在这里走错了路。 我有一个生成用户定义表单的应用程序,我的数据比这更复杂,但想法是——我有一个数据表,其中包含从用户定义的表单输入的所有数据 creat
我有一个带有选择值的游标,我想在取决于我是否找到任何行之后做一些事情。 recs_Table SYS_REFCURSOR; begin open recs_Table for s
我有点被困在这里了。我在 Oracle 中有一个愚蠢的小函数,并尝试用 Java 访问它。返回值应该是 SYS_REFCURSOR。但如果我尝试用 Java 调用它,就会出现错误。 这是 Oracle
下面的 W.r.t 代码我不能将 fetch-into-variable 的类型声明为基础表的 %ROWTYPE,因为 SYS_REFCURSOR 位于连接两个表的选择上,并且还选择了一些在基础两个表
我正在使用 Oracle 12c。在 PL/SQL 我可以做到这一点 set serveroutput on declare begin for x in (select 1 as y from
所以我有一个存储过程ONE create or replace PROCEDURE ONE ( A in number B in number ... ZZ out SYS_R
我正在使用 Oracle 12g,并尝试从 SYS_REFCURSOR 获取 ResultSet 我有一个带有以下签名的过程: CREATE OR REPLACE PROCEDURE proc_sea
这可能有点傻,但我想知道这是否可能。 我有一个返回 sys_refcursor 的函数 CREATE OR REPLACE FUNCTION get_employee_details(p_emp_no
我正在尝试通过 Entity Framework 访问 Oracle 11g 上的存储过程。我可以访问返回标量和返回正确值的存储过程。但是当使用 SYS_REFCURSOR 用于返回结果集,函数导入时
我有一个 PL/SQL 包,它根据您传递的 id 返回一个 sys_refcursor。我想遍历一些 id 并创建一个新的 ref 游标,其中包含为每个 id 重复的原始结果集中的一列。 (类似于交叉
我的包体中有一个过程: create or replace package body MYPACKAGE is procedure "GetAllRules"(p_rules out
我正在尝试使用 PLSQL 存储过程获取行,并将它们保存到 JPA 实体中。我正在使用ojbdc7 , spring-boot-starter-data-jpa和spring-boot 2.2.1 .
我的包体中有一个过程: create or replace package body MYPACKAGE is procedure "GetAllRules"(p_rules out
是否可以在 plsql 中执行动态 sql 并将结果返回到 sys_refcursor 中?到目前为止,我已经粘贴了我的尝试,但无法正常工作,这是我通过我的 java 应用程序遇到的错误 ORA-01
我想使用 JPA 调用带有 SYS_REFCURSOR 的过程,如 OUT 参数。使用普通 JDBC 非常容易,但我不确定这在 JPA 中是否可行。 我的程序如下: CREATE OR REPLACE
我有一个像这样的(简化的)Oracle SQL: declare xd number; xm number; DataOut sys_refcursor; begin xd := to
我是一名优秀的程序员,十分优秀!