2016-12-05 80 views
0

我想在我的数据库中的表中插入一个新行。我遇到了以下MODPLSQL_PROCEDURE_NAME字段的问题。PL SQL插入参数到字符串

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盖子从上面的陈述。任何人都可以告诉我正确的语法来做到这一点?

此外,我已经打破了我的字符串&的为了避免弹出一个框要求我输入参数,'set define off'不会改变这一点。有没有更好的写作方式?

回答

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',