Perl DBI - 使用多个语句运行 SQL 脚本
我有一个sql文件test.sql,用于运行一些SQL(创建对象/更新/删除/插入),看起来像这样
CREATE TABLE test_dbi1 (
test_dbi_intr_no NUMBER(15)
, test_dbi_name VARCHAR2(100);
UPDATE mytable
SET col1=1;
CREATE TABLE test_dbi2 (
test_dbi_intr_no NUMBER(15)
, test_dbi_name VARCHAR2(100);
通常,我只会使用SQLPLUS(从Perl内部)来执行这个test.sql 使用此命令: @test.sql
有没有办法在 Perl 中使用 DBI 来做同样的事情? 到目前为止,我发现DBI一次只能执行一条语句,并且没有“;” 在最后。
I have a sql file test.sql used to run some SQL (create object / update / delete / insert) that can look like this
CREATE TABLE test_dbi1 (
test_dbi_intr_no NUMBER(15)
, test_dbi_name VARCHAR2(100);
UPDATE mytable
SET col1=1;
CREATE TABLE test_dbi2 (
test_dbi_intr_no NUMBER(15)
, test_dbi_name VARCHAR2(100);
Usually, i would just use SQLPLUS (from within Perl) to execute this test.sql using this command :
@test.sql
Is there a way to do the same thing, using DBI in Perl ?
So far, i found DBI can only execute one statement at a time, and without the ";" at the end.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
数据库控制一次可以执行多少条语句。 我不记得 Oracle 是否允许每个
prepare
多个语句(MySQL 允许)。 试试这个:当然,如果你分解语句,你会得到更好的错误处理。 您可以使用简单的解析器将字符串分解为单独的语句:
The database controls how many statements can be executed at a time. I can't remember if Oracle allows multiple statements per
prepare
or not (MySQL does). Try this:Of course, you get better error handling if you break the statements up. You can use a simple parser to break the string up into individual statements:
请看一下这个新的 CPAN 模块:DBIx::MultiStatementDo
正是为此而构思的。
Please, have a look at this new CPAN module: DBIx::MultiStatementDo
It has been conceived precisely for that.
Oracle 可以使用匿名 PL/SQL 块在一次准备中运行多个 SQL 语句。
例如,
DDL(创建或删除对象)更加复杂,主要是因为它是您不应该临时执行的操作。
Oracle can run multiple SQL statements in one prepare using an anonymous PL/SQL block.
eg
DDL (creating or dropping objects) is more complicated, mostly because it is something you shouldn't be doing on an ad-hoc basis.
您可以在 Perl 中添加另一层逻辑,它解析 SQL 脚本,将其拆分为语句,并使用上述技术逐个执行它
You may add yet another layer of logic in Perl which parses the SQL script, splits it into statements and execute it one by one using the technique above