【问题标题】:Using JRuby with Oracle Database to populate a database将 JRuby 与 Oracle 数据库一起使用来填充数据库
【发布时间】:2017-04-20 20:27:42
【问题描述】:

我希望使用 jruby 填充数据库。我按照here 的说明进行操作,并且我的更新和查询运行良好。我的问题是数据库的初始填充。初始填充是使用 sqlplus 调用以下 sql 脚本完成的:

CREATE OR REPLACE FUNCTION createLcid RETURN varchar2 IS
  hexval varchar2(64);
  digit  number;
  hexdigit  char;
BEGIN
  FOR i IN 1..32 loop
     digit := TRUNC(DBMS_RANDOM.value(1,16));
     if digit > 9 then 
       hexdigit := chr(ascii('a') + digit - 10);
     else
       hexdigit := to_char(digit);
     end if;
     hexval := hexval || hexdigit;
  end loop;
  return hexval;
END createLcid;
/ 

BEGIN
   FOR i IN 1..50 LOOP
      INSERT INTO as_dcm_testing VALUES (createLcid(), to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF1'),    TRUNC(DBMS_RANDOM.value(100000,999999999)), 'VL' || to_char(TRUNC(DBMS_RANDOM.value(1,9))));
   END LOOP;
   COMMIT;
END;
/

PROMPT Complete
PROMPT *************************************************************************

EXIT;

我想用文档中的 OracleConnection 调用替换 sqlplus 调用,但作为示例中的 prepare_call 或 execute_query 运行似乎不会更新表。运行 sqlplus 可以。

我试过了 以文本形式读取文件并将其传递给 prepare_call/execute_update 和 execute_query(无错误 - 表未更新), 以文本形式读入文件,将其拆分为 ;并将数组中的每一行传递给 prepare_call/execute_update 和 execute_query (没有错误 - 表未更新), 在主类中创建一个辅助调用,其中包含 sql 文件中的内容,并将其传递给 prepare_call/execute_update 和 execute_query(无错误 - 未更新表)。

任何想法我做错了什么或有人使用 jdbc 驱动程序有不同的方法?

一个

【问题讨论】:

    标签: oracle jruby


    【解决方案1】:

    其中一种方法是用 sql 替换您的 pl/sql 函数。 然后你就可以直接从 JRuby 循环执行纯 sql 脚本了:

    select 
        to_char(trunc(dbms_random.value(1,power(16, 32))), lpad('x', 32, 'x'))
    from dual;
    

    是否有理由不将零包含在随机选择中?

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 2017-10-31
      • 2012-02-29
      • 2016-12-26
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2011-06-07
      相关资源
      最近更新 更多