【问题标题】:parse CSV file .. problem with managing primary key?解析CSV文件..管理主键有问题吗?
【发布时间】:2011-02-14 09:08:00
【问题描述】:

我刚刚创建了一个 java 文件来解析一个 csv 文件并将它们保存到一个 oracle 数据库中.. 但我需要一个字段 ID 作为主键.. 我有点困惑 abt 循环..

【问题讨论】:

  • 当您对自己的问题不那么困惑时,请回来。我怀疑“Oracle 序列”的谷歌会给你一些提示。
  • 我对你的问题有点困惑...
  • 我有一个 csv 文件,它被传输到一个 oracle 数据库中。现在 pbm 是我需要一个我创建的表的序列号字段。我可以在我的 java 程序中实现逻辑吗写作?

标签: database oracle loops stringtokenizer


【解决方案1】:

我认为您需要做的就是利用一个序列(如 Ronnis 建议的那样)

这样

CREATE SEQUENCE FIELD_ID_SEQ START WITH 1 INCREMENT BY 1 NOCYCLE NOCACHE; 
/*NOTE THE SEQUENCE, WHILE INCREMENTING, IS NOT GUARANTEED TO BE 1,2,3,4...N ->expect gaps in the #*/

现在在您保存数据的 Java 应用程序中:

"INSERT INTO TABLE_OF_CSV(FIELD_ID, FIELD_COLA, FIELD_COLB) VALUES(FIELD_ID_SEQ.NEXTVAL, ?,?);"


现在,如果您使用的是过程(或包中的过程),您可以执行此操作(注意这会将主键返回给调用应用程序)

create procedure insertIntoCSVTable(pCOLA IN TABLE_OF_CSV.FIELD_COLA%TYPE 
                                  , pCOLB IN TABLE_OF_CSV.FIELD_COLB%TYPE
                                  , pFIELD_ID OUT TABLE_OF_CSV.FIELD_ID%TYPE)
AS
BEGIN

    INSERT INTO TABLE_OF_CSV(FIELD_ID, FIELD_COLA, FIELD_COLB) 
    VALUES(FIELD_ID_SEQ.NEXTVAL, pCOLA, pCOLB)
    RETURNING FIELD_ID
    INTO pFIELD_ID
    ;

END insertIntoCSVTable;

假设您已经在 J​​ava 代码中循环(假设是逐行插入),则不需要循环



您可以使用触发器将新值插入表中: 创建或替换

TRIGGER TABLE_OF_CSV_TRG BEFORE INSERT ON TABLE_OF_CSV 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.FIELD_ID IS NULL THEN
      SELECT FIELD_ID_SEQ.NEXTVAL INTO :NEW.FIELD_ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2018-07-31
    • 1970-01-01
    • 2018-10-10
    • 2016-12-16
    相关资源
    最近更新 更多