创建一个UDF,接受CSV字符串,并在DB2中返回一个表,以便在存储过程中用于批量插入

创建一个UDF,接受CSV字符串,并在DB2中返回一个表,以便在存储过程中用于批量插入,db2,user-defined-functions,Db2,User Defined Functions,我对数据库很陌生。。这就是问题所在 我需要在表中进行大容量插入。作为存储过程的输入,我得到一个如下所示的字符串 "1, abc, 123.45; 2, def, 678.90; 3, ghi, 332.99;" 是否可以创建一个UDF,它将返回一个如下所示的表 Column 1 Column 2 Column 3 1 abc 123.45 2 def 678.90 3 ghi 332.99

我对数据库很陌生。。这就是问题所在

我需要在表中进行大容量插入。作为存储过程的输入,我得到一个如下所示的字符串

"1, abc, 123.45; 2, def, 678.90; 3, ghi, 332.99;"
是否可以创建一个UDF,它将返回一个如下所示的表

Column 1   Column 2  Column 3
 1          abc       123.45
 2          def       678.90
 3          ghi       332.99     

您可以通过创建一个表函数并实现该功能来实现这一点

我用Java做这类事情

您也只能使用SQL:

这是我建议使用Java的一个示例:

public void cvsToTable(String csv/*val1*/, int val2, String val3, double val4)
        throws Exception {
switch (getCallType()) {
case SQLUDF_TF_FIRST:
    break;
case SQLUDF_TF_OPEN:
    // Creates a tokenizer or something similar
    st = new StringTokenizer(csv, ";");
    break;
case SQLUDF_TF_FETCH: // This is called each time for each row.
    // Iterates over the set of tokens (each row)
    if (st.hasMoreTokens()) {
        String row = st.nextToken();
        StringTokenizer values = new StringTokenizer(row, ",");
        int i = 2;
        int MAX = 5;
        while (values.hasMoreTokens()) {
            String record = values.nextToken();
            if (i >= MAX) {
                i = 2
            // Sets the record in the answer.
            set(i, record);
            i++;
        }
    } else {
        // No more rows
        setSQLstate("02000");
    }
    break;
case SQLUDF_TF_CLOSE:
    break;
case SQLUDF_TF_FINAL:
    break;
default:
    throw new Exception("Unexpected call type of " + getCallType());
}
}

我写了一篇解释如何使用表函数的博客:

哪个版本的DB2?这些数据来自哪里?您应该如何判断列的数据类型是什么?数据是否应该被持久化,而不仅仅是临时表?有多少行?DB2版本是DB2/NT64 9.1.4。数据来自C++应用程序。第一列为int(索引列),其余为Varchar。我需要在存储过程中使用该表,但我希望能够在实际存储它之前对其进行一些处理。行可能是不确定的。。。我想搜索“;”来定义行。和“,”要定义columnsHmm,您可以在存储过程中使用循环将其拆分,尽管我个人更喜欢在应用程序层进行拆分,然后阻止将其上载到数据库中的
全局临时表
,如果您有大量行,您可能可以使用load命令上载整个文件—您可能需要稍微重新格式化它。或者,是否可能以某种方式将表作为参数传递给要插入的SP?在C++代码中创建表并发送thouth.xxx x0,循环和全局临时表对我来说是最好的。