我在(AS / 400,iSeries,PowerI或其他)盒子上。 我正在尝试开发一个存储过程,为数据库成员创建一个ALIAS,将该别名用于select into,最后删除别名。
我正在调整SQL错误代码SQL0204(即找不到文件或成员),然后调用该过程。
sql参考手册中有一条说明:
如果指定了成员,则别名不能在大多数SQL模式中使用 声明。它可以用于CREATE PROCEDURE,CREATE FUNCTION和in 带有as-result-table子句的CREATE TABLE
我不明白“as-result-table”的含义,或者如何编码。
我的代码是这样的:
create procedure targetlib/check_sql
( IN MEMBERNAME CHAR(10))
LANGUAGE SQL
DETERMINISTIC
MODIFIES SQL DATA
BEGIN
Create ALIAS targetlib/table544 for targetfile( MEMBERNAME );
INSERT INTO targetlib/receiver (
SELECT * FROM targetlib/table544
WHERE field1='SOMETHING' AND field2 = 'ELSE'
);
DROP ALIAS targetlib/table544;
END;
解决:它必须是完全动态的sql,否则它将无法正常工作。 如果我这样编码(我不能使用||进行连接):
set sql_string = CONCAT('create alias targetlib/table544 for targetfile(', CONCAT(MEMBER, ')'));
PREPARE S1 from sql_string;
execute S1;
我的作品。感谢Gordon Linoff指出正确方向的人。{/ p>