PLSQL 并非所有变量都绑定

2023-12-29

我不断收到以下错误,“ORA-01008:并非所有变量都绑定”,我猜测它 全部基于我的 pPostcode 参数,但我不确定。 我是整个 PLSQL 领域的初学者,任何帮助将不胜感激

这是我的程序:

 procedure all_customer_postcode(pPostcode in carer.postcode%type
                                ,pReport out SYS_REFCURSOR) is
  begin
    open pReport for
      select c.id, c.forename, c.surname,c.address_1,c.address_2,
             c.address_3,c.address_4, c.postcode, c.date_of_birth, cf.id    
        from customer c, customer_friend cf,customer_friend_for cff 
       where c.id = cff.customer_id AND cff.id = cff.customer_friend_id
       AND c.postcode = pPostcode;
  end;

谢谢乔恩


我稍微修改了您的程序,因为您发布的 WHERE 子句对我来说没有意义......

SQL> create or replace procedure all_customer_postcode
  2          (pPostcode in customer.postcode%type
  3                                  ,pReport out SYS_REFCURSOR) is
  4  begin
  5      open pReport for
  6        select c.id
  7               , c.forename
  8               , c.surname
  9               ,c.address_1
 10               ,c.address_2
 11               ,c.postcode
 12               , c.date_of_birth
 13               , cf.id  as cf_id
 14          from customer c
 15              , customer_friend cf
 16              ,customer_friend_for cff
 17         where c.id = cff.customer_id
 18         AND cf.id = cff.customer_friend_id
 19         AND c.postcode = pPostcode;
 20  end;
 21  /

Procedure created.

SQL>

在 SQL*Plus 中使用变量调用它是可行的...

SQL> var rc refcursor
SQL> var pc varchar2(8)
SQL> exec :pc := 'ML1 4KJ'

PL/SQL procedure successfully completed.

SQL> exec all_customer_postcode(:pc, :rc)

PL/SQL procedure successfully completed.

SQL> print rc

        ID FORENAME   SURNAME    ADDRESS_1            ADDRESS_2            POSTCODE DATE_OF_B      CF_ID
---------- ---------- ---------- -------------------- -------------------- -------- --------- ----------
         1 Joe        Chip       1234 Telepath Drive  Milton Lumpky        ML1 4KJ  01-FEB-90         11
         4 Ray        Hollis     777 Telepath Drive   Milton Lumpky        ML1 4KJ  01-SEP-81         44
         5 Pat        Conley     1235 Telepath Drive  Milton Lumpky        ML1 4KJ  01-OCT-91         55

SQL>

那么,我们怎样才能让它抛出 ORA-1008 呢?通过将查询转换为字符串并更改参数的声明方式......

SQL> create or replace procedure all_customer_postcode
  2          (pPostcode in customer.postcode%type
  3                                  ,pReport out SYS_REFCURSOR) is
  4  begin
  5      open pReport for
  6        'select c.id
  7               , c.forename
  8               , c.surname
  9               ,c.address_1
 10               ,c.address_2
 11               ,c.postcode
 12               , c.date_of_birth
 13               , cf.id  as cf_id
 14          from customer c
 15              , customer_friend cf
 16              ,customer_friend_for cff
 17         where c.id = cff.customer_id
 18         AND cf.id = cff.customer_friend_id
 19         AND c.postcode = :pPostcode';
 20  end;
 21  /

Procedure created.

SQL> exec all_customer_postcode(:pc, :rc)
BEGIN all_customer_postcode(:pc, :rc); END;

*
ERROR at line 1:
ORA-01008: not all variables bound
ORA-06512: at "APC.ALL_CUSTOMER_POSTCODE", line 5
ORA-06512: at line 1


SQL>

所以让我们修复that ...

SQL> create or replace procedure all_customer_postcode
  2          (pPostcode in customer.postcode%type
  3                                  ,pReport out SYS_REFCURSOR) is
  4  begin
  5      open pReport for
  6        'select c.id
  7               , c.forename
  8               , c.surname
  9               ,c.address_1
 10               ,c.address_2
 11               ,c.postcode
 12               , c.date_of_birth
 13               , cf.id  as cf_id
 14          from customer c
 15              , customer_friend cf
 16              ,customer_friend_for cff
 17         where c.id = cff.customer_id
 18         AND cf.id = cff.customer_friend_id
 19         AND c.postcode = :pPostcode' using pPostcode;
 20  end;
 21  /

Procedure created.

SQL> exec all_customer_postcode(:pc, :rc)

PL/SQL procedure successfully completed.

SQL> 

所以我成功地重新创建了一个ORA-1008;我不确定它是否符合您的ORA-1008情况。你的直觉是对的,这与价值如何有关pPostcode被传递给查询。只是您发布的代码实际上正确执行了操作,因此不会失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PLSQL 并非所有变量都绑定 的相关文章

  • 如何查看授予其他用户的架构哪些权限

    考虑这种情况 在数据库中 我有两个用户 A 和 B 及其相应的架构 我想知道 如何获取信息 架构 B 中的用户 A 有哪些权限 考虑这种情况 我们有两个用户及其关联的场景 我们有用户A和用户B 在A中 假设我们有TB1 TB2 在B中 假设
  • Oracle DataAccess 相关:“动态程序集中不支持调用的成员。”

    据我了解 此类错误已在 SO 上讨论过多次 有些人认为这是 DLL 文件中的错误 有些人通过更改 DLL 版本来解决 其他人似乎没有任何线索 无论如何 我只是发帖试试运气 在 C GUI 上的网格中选择一行时 我的应用程序崩溃了 stack
  • 根据 Oracle SQL 中的营业时间计算时间

    我希望根据工作时间计算任务开始和结束之间的时间 我有以下示例数据 TASK START TIME END TIME A 16 JAN 17 10 00 23 JAN 17 11 35 B 18 JAN 17 17 53 19 JAN 17
  • Oracle SQL 触发器上的变异表

    我正在尝试执行触发器 但出现变异表错误 SQL 代码是这样的 CREATE OR REPLACE TRIGGER CHK Apartado D BEFORE INSERT OR UPDATE ON CONTRACTS FOR EACH RO
  • WHERE IN 条件不接受字符串值

    我正在动态构造一个带有名称的字符串用户数据在 PL Sql 过程中通过附加用户名 单引号 和逗号 的形式 abc123 xyz456 pqr789 但是当我将此字符串传递给 SELECT 语句的 WHERE IN 条件时 SELECT FR
  • PL/SQL 过程成功完成但没有显示任何内容

    我有以下过程代码 create or replace PROCEDURE Ventas cliente p DNI IN CHAR IS CURSOR c pedidos clientes IS SELECT FROM Pedidos ve
  • Oracle 11g OFFSET FETCH 给出错误

    我正在进行查询并尝试从数据库中获取随机数量的行 但 Oracle 一直告诉我我的命令尚未正确结束 select from random table order by random column name offset 0 rows fetc
  • Oracle 中的函数与过程

    Oracle 中函数和过程的主要区别是什么 如果我可以用函数完成所有事情 为什么我必须使用过程 如果我无法在sql语句中调用过程 好吧 我会编写一个函数来完成相同的工作 过程不返回值 好的 在任何 dml 操作后我将仅返回 sql rowc
  • 使用 SQL 序数位置表示法的好处?

    背景资料 序数位置表示法 又称序数 是基于列列表中的列顺序的列简写 SELECT子句 而不是列名或列别名 通常支持在ORDER BY子句 某些数据库 MySQL 3 23 PostgreSQL 8 0 支持语法GROUP BY条款也是如此
  • Oracle中如何检测4字节UTF8字符

    我们已经看到oracle中存储了4字节的UTF 8字符 我们需要检测特定列中有多少行包含此类字符 尝试了这里给出的建议 UTF 16 补充字符 https stackoverflow com questions 34720830 how t
  • 数百个别名/同义词与数据库表的完全限定名称

    考虑到多个模式中的数百个数据库表 在创建存储过程和视图时 您是否建议使用别名 同义词或完全限定名称 给定一些 schema table 像这样 Orders OrderHeader Production LineThroughput Sal
  • 授予用户在查询时使用表索引的什么?

    我想知道当用户从表中查询数据并且该用户已被授予以下权限时 oracle 是否使用索引 grant select on table to user 我想知道是否需要其他拨款才能使用索引 不 没有要求 或能力 授予对索引的访问权限 如果用户可以
  • 使用Powershell访问远程Oracle数据库

    我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • Oracle - 使用 DBMS_MVIEW.REFRESH 刷新“REFRESH FORCE ON DEMAND”视图时会发生什么

    我有以下物化视图 CREATE MATERIALIZED VIEW TESTRESULT ON PREBUILT TABLE WITH REDUCED PRECISION REFRESH FORCE ON DEMAND WITH PRIMA
  • 通过 Oracle 的数据库链接运行 SQL Server 存储过程

    参考如何通过数据库链接执行 Oracle 存储过程 https stackoverflow com questions 240788 how to execute an oracle stored procedure via a datab
  • Oracle TDE 能否保护数据免受 DBA 的侵害?

    甲骨文专家 我的客户想要部署一个必须在数据库中保存信用卡号的应用程序 客户显然很关心安全性 我们特别关注一个令人痛苦的问题 我们如何确保只有具有 业务需要知道 的授权用户才可以访问数据 我们如何保护数据免受 DBA 的侵害 一个明显的解决方
  • 在触发期间更新 oracle 中的同一行?

    简短的问题 因为我不知道如何搜索这个 我可以 重新更新 同一行吗 例如 我有一个存储付款小计的字段 并且考虑到我的业务限制 我可以更新该值 我可以仅用触发器更新同一行的总计吗 预先谢谢您 顺便说一句 我正在使用 Oracle 和 PL SQ
  • 如何在 Oracle PLSQL 中提交单个事务

    我需要编写一个 PL SQL 过程 在这个过程中 我需要在其自己的事务范围内调用另一个过程 并提交它 无论主事务是否失败或提交 换句话说 我需要类似的东西REQUIRES NEW交易传播 就像是 procedure mainProcedur
  • 如何在java 1.8中从org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8转换为oracle.jdbc.OracleConnection

    如何在 java 1 8 中从 org jboss jca adapters jdbc jdk8 WrappedConnectionJDK8 转换为 oracle jdbc OracleConnection 目前我正在这样使用并得到以下异常

随机推荐