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 个值(尽管它说它会)。
我一直在尝试使用代码查找 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 个值(尽管它说它会)。