如何以正确的方式在 pl sql 中声明变量?

Posted

技术标签:

【中文标题】如何以正确的方式在 pl sql 中声明变量?【英文标题】:how to declare a variable in pl sql the right way? 【发布时间】:2013-09-03 17:08:52 【问题描述】:

这是我的代码

  vJS     VARCHAR2(3500); --25065
     gMaxDays    s_criteria%rowtype := get_criteria_rec('MAX_DAYS_BOOKING');

BEGIN
  IF NOT Sec_Pkg.chk_sec('ATLAS_INV_OVERBOOK') THEN
       -- Exit procedure if security did not pass
       RETURN;
   END IF;
    --
    vJS :=  ' gMaxDays;'||CHR(10)||
            'function checkfields() ' ||CHR(13) ||
            '    // Setting the target here' ||CHR(13) ||
            '    document.frmInvSelect.target="_top"' ||CHR(13) ||

我创建了 gMaxDays,起初我对其进行了硬编码,但现在它位于名为 s_criteria 的表上,MAX_DAYS_BOOKING 是 s_criteria 的一部分。我说得对吗?

这就是它过去的外观和工作方式

  vJS     VARCHAR2(3500); --25065

BEGIN
  IF NOT Sec_Pkg.chk_sec('ATLAS_INV_OVERBOOK') THEN
       -- Exit procedure if security did not pass
       RETURN;
   END IF;
    --
    vJS :=  'var gMaxDays = 366;'||CHR(10)||
            'function checkfields() ' ||CHR(13) ||
            '    // Setting the target here' ||CHR(13) ||
            '    document.frmInvSelect.target="_top"' ||CHR(13) ||
        [/code]

【问题讨论】:

你有什么错误吗?如果有,是哪一个? 我实际上没有收到错误,它只是没有进行任何搜索 什么意思?你的变量是空的吗? NO 不为空模块 max_days_booking 包含一行=366 include_list 中的行 【参考方案1】:

呃……你是在说这个吗

您曾经有一个“有效”的代码 sn-p:

vJS :=  'var gMaxDays = 366;'||CHR(10)||
        'function checkfields() ' ||CHR(13) ||
        '    // Setting the target here' ||CHR(13) ||
        '    document.frmInvSelect.target="_top"' ||CHR(13) ||

当你将 sn-p 修改为:

vJS :=  ' gMaxDays;'||CHR(10)||
        'function checkfields() ' ||CHR(13) ||
        '    // Setting the target here' ||CHR(13) ||
        '    document.frmInvSelect.target="_top"' ||CHR(13) ||

它不再“工作”了?

我猜您正在尝试生成 javascript 代码 sn-p。也许这就是你要找的:

declare
  vJS VARCHAR2(3500);
  gMaxDays s_criteria%rowtype := get_criteria_rec('MAX_DAYS_BOOKING');
begin
  -- here you have to call the correct field from the record
  -- in this example I assume it's max_day
  vJS := 'var gMaxDays = ' || gMaxDays.max_day || ';' || CHR(10)||
         'function checkfields() ' || CHR(10) ||
         '    // Setting the target here' || CHR(10) ||
         '    document.frmInvSelect.target="_top"' || CHR(10) ||
         ' // Add here something that makes this a valid JavaScript.'
end;

查看文档中关于 PL/SQL record variables 的内容。

【讨论】:

你从哪里得到 max_day? 当我把它放在 var gmaxdays 时它可以搜索所有数据库,但我只希望它能够搜索 366 天,这就是我放在表中的内容 @user1289509 因为你没有告诉所有必要的细节(s_criteria%rowtype 的结构)我不得不做出假设。在我的示例中,我假设gMaxDays 记录的相关字段是max_days。在您的真实代码中,您检查记录并使用正确的字段。如果这对您没有意义,我建议您研究有关记录的 PL/SQL 文档。

以上是关于如何以正确的方式在 pl sql 中声明变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 T-SQL 中一样在 PL/SQL 中声明和使用变量?

当Dapper不是对象时,如何使用Dapper正确声明SQL更新请求中的变量?

如何在 Swift 中正确声明变量?

如何在 Pl/SQL 中正确创建一个过程,在该过程中我创建一个表并使用一个游标

检查表[pl / sql block]中是否存在行的正确方法

如何以正确的方式处理结果集?