我在Oracle的SQL Developer中使用了这个控制台输出

ORA-01008: no todas las variables han sido enlazadas ORA-06512: en "CIUDADANOS.CIUD_UTILIDADES_PKG", línea 183 01008. 00000 - "not all variables bound" *Cause:
*Action:

问题可能出在以下几行中

OPEN l_temp FOR l_query USING fecha_val, departamento_val, localidad_val, edad_val, destinatario_val;

但是当查看SQL查询中使用的所有变量时

这是完整的功能

FUNCTION OBTENER_NOTIFICATIONS(fecha_val IN DATE, departamento_val IN NUMBER, localidad_val IN NUMBER, edad_val IN NUMBER, destinatario_val IN VARCHAR2)
RETURN VARCHAR2
AS
    l_query      VARCHAR2(2000);
    l_result     VARCHAR2(4000);
    l_temp       SYS_REFCURSOR;
    l_row        NOTIFICATIONS%ROWTYPE;
BEGIN
    l_query := 'SELECT * FROM NOTIFICATIONS WHERE ' || 
               '(:fecha_val >= NOTIFICATION_DATE_FROM) AND ' ||
               '(:fecha_val < NOTIFICATION_DATE_TO) AND ' ||
               '((DEPARTMENT_ID = :departamento_val)) AND ' ||
               '((LOCALITY_ID = :localidad_val)) AND ' ||
               '(:edad_val >= AGE_FROM) AND ' ||
               '(:edad_val < AGE_TO) AND ' ||
               '((RECIPIENTS = :destinatario_val) OR (RECIPIENTS = ''both''))';
    OPEN l_temp FOR l_query USING fecha_val, departamento_val, localidad_val, edad_val, destinatario_val;
    LOOP
        FETCH l_temp INTO l_row;
        EXIT WHEN l_temp%NOTFOUND;
        l_result := l_result || '{"ID": ' || l_row.ID || ', "RECIPIENTS":"' || l_row.RECIPIENTS || '","AGE_FROM":' || l_row.AGE_FROM || ',"AGE_TO":' || l_row.AGE_TO || ',"DEPARTMENT":' || l_row.DEPARTMENT_ID || ',"LOCALITY":' || l_row.LOCALITY_ID || ',"MESSAGE_TITLE":"' || l_row.MESSAGE_TITLE || '","MESSAGE_BODY":"' || l_row.MESSAGE_BODY ||'","ATTACHMENT_TYPE":"' || l_row.ATTACHMENT_TYPE || '","ATTACHMENT":"' || blob_to_base64(l_row.ATTACHMENT) || '","NOTIFICATION_DATE_FROM":"' || l_row.NOTIFICATION_DATE_FROM || '","NOTIFICATION_DATE_TO":"' || l_row.NOTIFICATION_DATE_TO || '","SEND_BY_EMAIL":"' || l_row.SEND_BY_EMAIL || '","CREATED_AT":"' || l_row.CREATED_AT || '","UPDATED_AT":"' || l_row.UPDATED_AT || '","DELETED_AT":"' || l_row.DELETED_AT || '"}';
    END LOOP;
    IF l_temp%ISOPEN THEN
        CLOSE l_temp;
    END IF;
    RETURN l_result;
END;

推荐答案

您使用的是位置绑定,因此需要确保每个绑定都有一个与其精确顺序/位置相关联的变量.它不是在看名字.您需要将echa_val和edad_val绑定增加一倍:

l_query := 'SELECT * FROM NOTIFICATIONS WHERE ' || 
               '(:fecha_val >= NOTIFICATION_DATE_FROM) AND ' ||
               '(:fecha_val < NOTIFICATION_DATE_TO) AND ' ||
               '((DEPARTMENT_ID = :departamento_val)) AND ' ||
               '((LOCALITY_ID = :localidad_val)) AND ' ||
               '(:edad_val >= AGE_FROM) AND ' ||
               '(:edad_val < AGE_TO) AND ' ||
               '((RECIPIENTS = :destinatario_val) OR (RECIPIENTS = ''both''))';
    OPEN l_temp FOR l_query USING fecha_val, fecha_val, departamento_val, localidad_val, edad_val, edad_val, destinatario_val;

Sql相关问答推荐

为什么Postgrs Planner会在输出部分中显示我在查询中不使用的列?'""

如何使用PostGIS从单个表中 Select 所有相交面组

当我们加入两个表时,我们可以省略GROUP BY中的列名吗?

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

删除MariaDB数据库中的JSON数据

从自定义日期和时间开始,每月具有给定状态的公司数量

Oracle分层查询-两条路径在末尾合并为一条

改进的SQL子字符串提取

根据日期 Select ID 的上一条记录

Oracle 21c 中的递归查询回顾过go 3 周

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

计算 ID 满足条件的次数

根据开始时间和结束时间计算has_impact字段

使用ALTER TABLE无法删除列

为什么在事务中未被后续使用的CTE执行SELECT...FOR UPDATE无效?

插入行时的行安全策略问题

以 15 分钟为间隔的使用情况SQL 查询

如何在 PL/SQL 中区分返回的 XML 值?

来自 SQL Server 的树层次 struct 图的 JSON

每组跨行曲折?