我正在尝试编写WinSCP脚本.我试过这个例子,
https://winscp.net/eng/docs/guide_automation#parametrized
但脚本不采用参数值.
当脚本被调用为时,
winscp.com /script=testscript /parameter param1
Run Code Online (Sandbox Code Playgroud)
发生以下情况:
第一,
Searching for host
host not found
Run Code Online (Sandbox Code Playgroud)
被展示.
接下来,实际使用连接到主机
"open command"
Run Code Online (Sandbox Code Playgroud)
但参数永远不会被替换.
它仍显示为 %1
我在工作中遇到了以下PL/SQL代码(变量已修改):
PROCEDURE test(i_w IN a.w%type,o_result IN OUT resu_cur_type) IS
BEGIN
IF i_w IS NULL THEN
open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z;
ELSE
open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z AND a.w=i_w;
END IF;
END test;
Run Code Online (Sandbox Code Playgroud)
我认为上述内容相当于以下内容:
PROCEDURE test(i_w IN a.w%type,o_result IN OUT resu_cur_type) IS
BEGIN
open o_result for SELECT a.x, b.y FROM a,b WHERE a.z=b.z AND NVL(a.w,1)=NVL(NVL(i_w,a.w),1);
END test;
Run Code Online (Sandbox Code Playgroud)
不一样吗?有人可以解释是否有任何理由使用原始版本?请注意,原始游标是一个50行查询,因此重构可能会提高其可读性并保持简单.
编辑:
为了解决Kevin Burton的答案中的问题,我更新了WHERE条件.
根据该网站, http://www.dba-oracle.com/t_nls_lang.htm
即使数据库和客户端都使用相同的字符集(AL32UTF8),也可能会出现问题.我无法理解这是如何可能的.从网站引用:
例如,假设数据库字符集是AL32UTF8,客户端是英语Windows操作系统,客户端上的NLS_LANG设置是AL32UTF8.进入数据库的数据在WE8MSWIN1252中编码,并且不会转换为AL32UTF8数据,因为客户端上的NLS_LANG设置与数据库字符集匹配.因此,Oracle假定不需要转换,并且将无效数据输入数据库.
当客户端中的编码是AL32UTF8时,如何将数据作为WE8MSIN1252进入数据库?
正如标题所说,如何使用LIMIT子句批量收集到嵌套表中?在以下示例中,cur_data是一个嵌套表,在随后的BULK COLLECT中被覆盖.我看到EXTEND用于向嵌套表添加数据.有没有办法和BULIK COLLECT做类似的事情?
OPEN cur;
LOOP
FETCH cur bulk collect INTO cur_data LIMIT 500;
EXIT WHEN cur_data%COUNT=0;
END LOOP;
CLOSE cur;
/*Data gets overwritten with empty cursor--> No data in cur_data here*/
OPEN cur;
FETCH cur bulk collect INTO cur_data;
CLOSE cur;
/*No Problems--> All data fetched into cur_data */
Run Code Online (Sandbox Code Playgroud)
提前致谢.
oracle ×3
plsql ×2
automation ×1
command-line ×1
encoding ×1
refactoring ×1
scripting ×1
sql ×1
utf-8 ×1
winscp ×1