【问题标题】:ruby:using regex i want to split sql statementsruby:使用正则表达式我想拆分 sql 语句
【发布时间】:2023-03-31 06:31:01
【问题描述】:

我正在使用 ruby​​、sinatra 和 oci8,我想运行一个包含多个 sql 语句的 sql 文件,但 oci8 只能让我执行一个语句

str="INSERT INTO AA(NAME) VALUES ('asasa')"
@conn1 = OCI8.new(DB_USER, DB_PASSWORD, DB_SERVER)
@conn1.exec(str)

为此,我必须使用正则表达式拆分所有 sql 语句,但我有一个问题,我没有找到让我这样做的正则表达式。我想拆分所有的语句

sql 文件示例;

create table users (name varchar2(20),age int);
begin
insert into users values('amine5',20);
insert into users values('amine5',30);
end;

文件可以包含所有的sql语句

【问题讨论】:

  • 这样做可能不是一个好主意,对于这些初始插入,您可能应该在没有 OCI8 的情况下直接执行 SQL,但无论如何,一个问题 - 这些只是插入语句吗?
  • 不,我正在处理所有 sql 语句,我知道这很难做到,但我不知道任何可以读取 sql 文件并执行它或可以执行许多 sql 语句的 gem同时

标签: ruby regex oracle11g oci8


【解决方案1】:

如果您只处理插入语句,这对您来说是一个开始。

string2.0.0-p353 :001 > string =<<-EOS
2.0.0-p353 :002"> insert into users values('amine5','sdfsdf');
2.0.0-p353 :003"> begin
2.0.0-p353 :004"> insert into users values('amine5','sdfsdf');
2.0.0-p353 :005"> insert into users values('amine5','sdfsdf');
2.0.0-p353 :006"> end;
2.0.0-p353 :007"> insert into users values('amine5','sdfsdf');
2.0.0-p353 :008"> EOS
 => "insert into users values('amine5','sdfsdf');\nbegin\ninsert into users values('amine5','sdfsdf');\ninsert into users values('amine5','sdfsdf');\nend;\ninsert into users values('amine5','sdfsdf');\n" 
2.0.0-p353 :012 > string.scan(/insert.+;/i)
 => ["insert into users values('amine5','sdfsdf');", "insert into users values('amine5','sdfsdf');", "insert into users values('amine5','sdfsdf');", "insert into users values('amine5','sdfsdf');"] 

Rubular 永久链接:http://rubular.com/r/Ffrd4swl4z

【讨论】:

  • 我不仅在处理插入语句,我还在处理所有 sql 语句,感谢您的回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2018-02-03
  • 2012-10-02
  • 2017-05-28
  • 1970-01-01
相关资源
最近更新 更多