【问题标题】:PL/SQL Query to check row's lengthPL/SQL 查询检查行的长度
【发布时间】:2022-01-12 20:43:46
【问题描述】:

我在解决这个问题时遇到了一些麻烦。

我必须检查表,如果有任何行超过 34 个字符的长度(为此,我使用 Lenght 命令使用查询的第一部分),如果找到,返回带有变量的错误“END_CNPJ$”(由查询“ENDERECO”的第二部分填充),因此用户可以看到哪一行的字符数超过 34 个。此代码是否正确(可能不正确)?如果不是,我该如何解决?

SELECT 
  LENGTH(CONCAT (CONCAT (CONCAT(CONCAT (CONCAT (CONCAT (CONCAT (
                       '', T.TTIPO_LOGR), 
                         ''), T.TENDERE),
                           ''), T.NNRO_ENDER),
                             ''),T.TCOMPL_ENDER) ), 
  T.TTIPO_LOGR || ' ' || T.TENDERE || ', ' || T.NNRO_ENDER || ' ' || T.TCOMPL_ENDER || ' - ' || TMUNICI || ' CNPJ: ' || T.NCGC AS ENDERECO
   INTO CHARACTER_COUNT$, END_CNPJ$
                                FROM TBENDER T 
                                 WHERE T.CEMPRES = :ENDER_BLK.CEMPRES;
                                 
  IF CHARACTER_COUNT$ > 34 THEN
    MSG_ALERT_COSMO(' You exceeded 34 character for this address: ' || END_CNPJ$ );
    RAISE FORM_TRIGGER_FAILURE;
  END IF;                    

我希望我没有违反任何规则,昨天刚到这里 :D

TIA

【问题讨论】:

  • 提示:使用|| 进行连接。喜欢str1 || str2 || str3
  • 感谢@jarlh 的提示!我会在最终代码上做。

标签: sql oracle plsql oracle11g oracleforms


【解决方案1】:

这实际上是 Oracle Forms,不是吗? raise form_trigger_failure:ender_blk 闻起来很香。

在这种情况下,唯一的缺点可能是该表中没有行用于块项目值(这将引发no_data_found)或两行或更多行(然后将引发too_many_rows)。

除此之外,这个应该没问题。

不过,有点不清楚为什么您很好地连接了 END_CNPJ$ 的值(使用双管道 || 运算符)并为 CHARACTER_COUNT$ 嵌套了许多 concat 函数。

另外,您没有发布整个触发代码(缺少声明、begin-end 关键字,或许还有其他内容)。

但是,正如我所说,总的来说 - 没关系。

【讨论】:

  • 是的,它是 Oracle Forms!对不起,我没有贴出整个代码,它非常广泛,但唯一的部分恐怕是错误的,这是我引用的。这不是最终代码,我将在最终代码上使用双管,谢谢提示!
猜你喜欢
  • 2011-08-22
  • 2013-04-03
  • 2012-10-26
  • 2014-07-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2023-03-11
  • 2018-07-01
相关资源
最近更新 更多