是否可以在Informix存储过程中执行类似的操作:
DEFINE my_data VARCHAR(255);
LET meta = (select count(*), something from tab11);
SYSTEM 'echo '|| meta;
答案 0 :(得分:1)
使用INTO
子句捕获输出,并将SELECT
包装在FOREACH
中。这一次获取一行数据,您需要为每个选择的列分别设置变量。然后,您可以将它们操作为更大的字符串。
然后,您可以使用SYSTEM
。
但是,echo
的输出将发送到/dev/null
(或NUL:
)。如果这就是你想要的,那很好 - 但为什么呢?如果没有,您需要为自己组织重定向到其他地方。
CREATE PROCEDURE echo(str VARCHAR(200) DEFAULT 'hello world');
DEFINE cmd VARCHAR(255);
LET cmd = "echo " || str || " >>/Users/jleffler/tmp/arcana.out";
SYSTEM cmd;
END PROCEDURE;
EXECUTE PROCEDURE echo();
EXECUTE PROCEDURE echo("The world is your oyster");
DROP PROCEDURE echo;
您需要调整文件名以适合您的目的 - 您机器上没有我的主目录的可能性很高。
示例输出文件:
hello world
The world is your oyster
导致文件的文件和目录的权限:
2 drwxr-xr-x root wheel 2017-05-24 17:17:16 /
169236 drwxr-xr-x root admin 2016-09-20 12:46:37 /Users
609973 drwxr-xr-x jleffler staff 2017-05-24 17:18:45 /Users/jleffler
1670154 drwxr-xr-x jleffler staff 2017-05-24 17:19:02 /Users/jleffler/tmp
63140467 -rw-r--r-- jleffler staff 2017-05-24 17:19:02 /Users/jleffler/tmp/arcana.out
答案 1 :(得分:0)
同意@Jonathan Leffler提到的所有内容。下面是另一个示例,其中select语句返回一个类似于您在问题中显示的整数值。
create procedure test();
DEFINE my_data int;
LET my_data = (select count(*) from systables);
system 'echo ' || my_data || ' > /tmp/my_data';
end procedure;
execute procedure test();
在我的测试系统中,select语句的输出
select count(*) from systables;
(count(*))
113
1 row(s) retrieved.
当我执行该过程时,系统语句的结果是文件/ tmp / my_data。
cat /tmp/my_data
113
简而言之,当然可以实现您的目标。但是,根据select语句的结果集,您可能需要在存储过程中进行更复杂的处理。