INFORMIX:如何将查询结果存储到变量中并将其作为字符串回显到系统?
INFORMIX: How can I store query result into a variable and echo it to the system as a string?
是否可以在 Informix 存储过程中执行类似的操作:
DEFINE my_data VARCHAR(255);
LET meta = (select count(*), something from tab11);
SYSTEM 'echo '|| meta;
您使用 INTO
子句捕获输出并将 SELECT
包装在 FOREACH
中。这一次获取一行数据,并且您 select 的每一列都需要单独的变量。然后您可以将它们操作成更大的字符串。
然后您可以使用 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
同意@Jonathan Leffler 上面提到的一切。这是另一个示例,其中 select 语句 returns 是一个类似于您在问题中显示的整数值。
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 语句的结果集,您可能需要在存储过程中进行更复杂的处理。
是否可以在 Informix 存储过程中执行类似的操作:
DEFINE my_data VARCHAR(255);
LET meta = (select count(*), something from tab11);
SYSTEM 'echo '|| meta;
您使用 INTO
子句捕获输出并将 SELECT
包装在 FOREACH
中。这一次获取一行数据,并且您 select 的每一列都需要单独的变量。然后您可以将它们操作成更大的字符串。
然后您可以使用 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
同意@Jonathan Leffler 上面提到的一切。这是另一个示例,其中 select 语句 returns 是一个类似于您在问题中显示的整数值。
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 语句的结果集,您可能需要在存储过程中进行更复杂的处理。