【向yunzhongyue提问】为何说我是画蛇添足
http://bbs.chinaunix.net/thread-1882552-1-1.html在informix 9.4 中 是不能执行动态sql的,
比如我有需求如果一个传入参数in_para是2005,则调用sp_test_2005
当参数是2006时,调用sp_test_2006,
请问yunzhongyue如何用存储过程实现?
难道这样写么?
if in_para = '2005' then
call sp_test_2005();
end if;
if in_para = '2006' then
calll sp_test_2006();
end if;
如果不是这么简单的逻辑呢?请yunzhongyue回答。 请问你的那个字符串是怎么生成的?如果是用4GL,可以用PREPARE,EXECUTE这种方式,EC也是一样,如果是SHELL,直接搞用echo xxx|dbaccess 就可以了,如果是其它的语言好像也不用这样的,没必要再弄个存储过程了! 请问你的那个字符串是怎么生成的?如果是用4GL,可以用PREPARE,EXECUTE这种方式,EC也是一样,如果是SHELL,直接搞用echo xxx|dbaccess 就可以了,如果是其它的语言好像也不用这样的,没必要再弄个存储过程了! 回复 3# yunzhongyue
恕我孤陋寡闻,据我所知,prepare是在ec中使用的,而之所以建立这个存储过程而不使用shell,因为我没想到也没找到,在shell获知sql执行结果的办法,所以写了这个存储过程,请您指教,比如我需要执行一个sql,得到一批年份,然后执行对应的存储过程例如:sp_test_2005,如果不用ec,有办法实现么,请您一定不吝赐教,非常感谢。 可以直接执行SHELL, 不一定要用过程.像这样简单的用法 我认为不要争了 自己高兴怎么用都行啊 :wink: 在SHELL中获取SQL结果可以unload到文件中或者用output to pipe "cat" without heading这种方式!
非要写这样子的存储过程吗?太死板了,可以把2005当成一个参数传进去呀。
另外我觉得如果使用这个存储过程,只可以运行一些简单的SELECT,对于INSERT,UPDATE这种语句,因为
没有检测返回值,没办法知道运行结果的!而且不可以把它放在事务当中,一旦里面的SQL或者是外面的SQL
ROLLBACK了,就会造成数据不一致! 在SHELL中获取SQL结果可以unload到文件中或者用output to pipe "cat" without heading这种方式!
非要写这 ...
yunzhongyue 发表于 2011-03-19 14:31 http://bbs.chinaunix.net/images/common/back.gif
高手 说的很对 ,想请教 一个问题 如果把tablename和一个文件名 作为参数传入function执行load/unload IDS 11.5之前的版本FUNCTION里确实不支持动态SQL,如果确实非要在FUNCTION里用动态SQL的话,只能是调用其它语言或是使用system fork一个新的进程来处理了!比如像mujian1986 写的那个存储过程,不过unload还好,load的话不能保证数据完整性了! 这个当初不太会用shell和ec,用这个法子取巧,呵呵。还是shell和ec是王道。
页:
[1]