2012-02-21 59 views
3

所以我想从Visual Studio执行一个oracle plsql脚本。我安装了Oracle's visual studio tools,并在VS2010中打开了一个连接到oracle数据库实例的新查询窗口。下面是我试图运行一个脚本示例:从Visual Studio执行Oracle脚本

DECLARE 
BEGIN 
DBMS_OUTPUT.put_line ('Hello World!'); --tried various types of statements here 
END; 

不管我怎么努力投入的开始/结束块,我得到的身体下面:

ERROR 
ORA-06550: line 4, column 3: 
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 

    ; <an identifier> <a double-quoted delimited-identifier> 
The symbol ";" was substituted for "end-of-file" to continue. 

我不从其他工具(如SQL开发人员或蟾蜍)运行时遇到同样的问题。是什么赋予了?

回答

2

确保您已在END;之后添加了新行字符,即行号。 4必须是最后一个:

DECLARE 
BEGIN 
    DBMS_OUTPUT.put_line ('Hello World!'); --tried various types of statements here 
END; -- press Enter here 

Oracle数据客户端(Oracle.DataAccess.Client)是真的挑剔一番。

更新:正如我怀疑,问题必须与行结束。事实证明,Oracle不接受PL/SQL脚本块中的\r0x0d)字符(但在处理普通SQL时似乎忽略它们),但查询窗口使用标准的Windows行结尾\r\n0x0d 0x0a),而这正是是什么导致了问题。

我使用Wireshark来查看当我点击Execute Query工具栏按钮时以及当我选择Menu -> Tools -> Execute SQL *Plus Script菜单项时通过线路传送的内容。其结果是陌生的,但可以预见的:执行查询发送查询文本原样(和我PLS-00103),而执行SQL * Plus脚本翻译\r\n\n

(命令成功完成(一个或多个)。)

因此,看来你已经有了这些选项:

  1. 通过菜单执行脚本块 - >工具 - >执行SQL * Plus脚本
  2. 使用能够任意编辑您的脚本保存到磁盘驱动器使用Unix风格的行结尾,然后从查询窗口中打开它(它保留了行结束在现有文件,我检查)
  3. 使用的东西有点比Oracle开发工具Visual Studio的更智能(我喜欢这个选项我自己)

希望这会有所帮助。

+0

这没有什么区别。 – Alex 2012-02-21 21:52:44

+0

@Alex:我更新了我的回答 – 2012-02-22 15:12:13

+0

你是对的。还有一种选择是使用VS插件去除CR,但我无法使它工作:http://grebulon.com/software/stripem.php – Alex 2012-02-22 18:11:01

1

声明必须有一个标识符/变量,因为你没有任何,删除声明语句。

+0

删除DECLARE没有区别。错误仍然存​​在。 – Alex 2012-02-21 21:52:11