Informix SELECT INTO 语法错误

Informix SELECT INTO syntax error

我一直在尝试使用代码查找 table 中的元素计数并将其存储在局部变量中。我基本上只是想检查记录是否存在,所以如果有更简单的方法可以做到这一点。

这是我发现的一个将查询结果存储在变量 (link) 中的示例:

CREATE FUNCTION checklist( d SMALLINT )
    RETURNING VARCHAR(30), VARCHAR(12), INTEGER;

    DEFINE name VARCHAR(30);
    DEFINE dept VARCHAR(12);
    DEFINE num INTEGER;

    SELECT mgr_name, department,
           CARDINALITY(direct_reports) 
       FROM manager INTO name, dept, num
       WHERE dept_no = d;
    IF num > 20 THEN
       EXECUTE FUNCTION add_mgr(dept);
    ELIF num = 0 THEN
       EXECUTE FUNCTION del_mgr(dept);
    ELSE
       RETURN name, dept, num;
    END IF;

END FUNCTION;

但是当我尝试创建我自己的版本时,出现语法错误。我不知道是什么问题。

CREATE FUNCTION test ()
     RETURNING INTEGER AS num1;

     DEFINE l_count INTEGER;

     CREATE TEMP TABLE t_queued_calls (
         session_id DEC(18,0) PRIMARY KEY,
         calling_number NVARCHAR(50)
     ) WITH NO LOG;

     INSERT INTO t_queued_calls VALUES (123456, '5555555555');
     SELECT COUNT(*) FROM t_queued_calls INTO l_count WHERE session_id = 123456;

     DROP TABLE t_queued_calls;
END FUNCTION;

这可能与插入没有列名有关

使 your_column1、your_column2 适应您的 table 架构

 INSERT INTO t_queued_calls (your_column1, your_column2) VALUES (123456, '5555555555');
 SELECT COUNT(*) FROM t_queued_calls INTO l_count WHERE session_id = 123456;

And/Or select 中的列数与插入的数字和类型不匹配......你 select 只插入一个字段但插入两个字段

and select into 是奇怪的 select 格式...通常是 insert into 但 select 不要使用 into 子句

我从这个问题中找到了正确的语法:[Use MERGE statement in a stored procedure with Informix

SELECT COUNT(*) INTO l_count FROM t_queued_calls WHERE session_id = 123456;

INTO 子句的位置在两个函数中都是错误的。 INTO 子句在 select-list(关键字 SELECT 之后的表达式列表)之后和 FROM 子句之前(参见 Informix "Guide to SQL: Syntax" 关于 SELECT 语句的手册),如以下代码所示:

CREATE PROCEDURE test()
     RETURNING INTEGER AS num1;

     DEFINE l_count INTEGER;

     CREATE TEMP TABLE t_queued_calls (
         session_id DEC(18,0) PRIMARY KEY,
         calling_number NVARCHAR(50)
     ) WITH NO LOG;

     INSERT INTO t_queued_calls VALUES (123456, '5555555555');
     SELECT COUNT(*) INTO l_count FROM t_queued_calls WHERE session_id = 123456;

     DROP TABLE t_queued_calls;

     RETURN l_count;

END PROCEDURE;

此外,问题中显示的第一个函数在子句的排序方面也存在同样的问题。此外,它并不总是 RETURN 一个值,第二个函数的原始版本从来没有 returns 个值(尽管它说它会)。