PL SQL将参数插入字符串

时间:2016-12-05 18:33:08

标签: database string plsql

我正在尝试在我的数据库中的表中插入一个新行。我在下面的MODPLSQL_PROCEDURE_NAME字段中遇到了问题。

DECLARE
    lId VARCHAR2(20);
BEGIN
    lId := 'XLRP' || SEQ.NEXTVAL;
END;

INSERT INTO REPORTS(CATEGORY_ID, 
                             DESCRIPTION, 
                             ID, 
                             MODPLSQL_PACKAGE_NAME, 
                             MODPLSQL_PROCEDURE_NAME, 
                             NOTES)
            VALUES          ('XLRC0', 
                             'Training Task XL Report', 
                             'XLRP' || WORKFLOW_REPORTS_SEQ.NEXTVAL, 
                             '!MODPLSQL_XL_REPORTS_PKG', 
                             'XL_REPORT?pReportId=' || lId || '&' || 'pReportName=Training Task XL Report' || '&' || 'pPackageName=TRAINING_PKG' || '&' || 'pProcedureName=RUN_NOW', 
                             NULL);

我想要的字段输出如下所示(示例lId = XLRP100):

XL_REPORT?pReportId=XLRP100&pReportName=Training Task XL Report&pPackageName=TRAINING_PKG&pProcedureName=RUN_NOW

在MODPLSQL_PROCEDURE_NAME中,我需要从上面的语句中导入seq生成的ID lId。任何人都可以告诉我正确的语法吗?

此外,为了避免弹出一个请求我输入参数的框,我已经打破了我的字符串&&#;;设置定义关闭'不会改变这一点。有没有更好的写作方式?

1 个答案:

答案 0 :(得分:0)

如果要在lId语句中使用INSERT的值,最简单的方法是将其移动到PL / SQL块中,例如:

DECLARE
    lId VARCHAR2(20);
BEGIN
    lId := 'XLRP' || SEQ.NEXTVAL;

    INSERT INTO REPORTS(CATEGORY_ID, 
                             DESCRIPTION, 
                             ID, 
                             MODPLSQL_PACKAGE_NAME, 
                             MODPLSQL_PROCEDURE_NAME, 
                             NOTES)
            VALUES          ('XLRC0', 
                             'Training Task XL Report', 
                             lId,
                             '!MODPLSQL_XL_REPORTS_PKG', 
                             'XL_REPORT?pReportId=' || lId || '&' || 'pReportName=Training Task XL Report' || '&' || 'pPackageName=TRAINING_PKG' || '&' || 'pProcedureName=RUN_NOW', 
                             NULL);

END;

其次,如果您想避免&字符出现任何问题,可以改用CHR(38)

                             'XL_REPORT?pReportId=' || lId || CHR(38) || 'pReportName=Training Task XL Report' || CHR(38) || 'pPackageName=TRAINING_PKG' || CHR(38) || 'pProcedureName=RUN_NOW',