INFORMIX:如何将查询结果存储到变量中并将其作为字符串回显给系统?

时间:2017-05-24 09:12:03

标签: informix

是否可以在Informix存储过程中执行类似的操作:

DEFINE my_data VARCHAR(255);
LET meta = (select count(*), something  from tab11);
SYSTEM 'echo '|| meta;

2 个答案:

答案 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语句的结果集,您可能需要在存储过程中进行更复杂的处理。