【问题标题】:substr on pl/sqlpl/sql 上的 substr
【发布时间】:2012-11-20 03:46:23
【问题描述】:

我正在尝试编写一个小的 pl/sql 脚本,需要一些帮助。 首先,我有 2 个名为 project1 和 project2 的表。两个表都有一个名为 cust_code 的列。

cust_code 值是 varchar2 类型。值始终以 1 开头。(数字 1,小数点)和 8 位数字。例如 1.10002332

当我将数据导入project1表时,如果最后一位为0,例如1.22321630,则最后一个零被删除,然后小数点后只有七位。在这种情况下,它将是 1.2232163

我要编写的脚本将检查小数点后是否只有 7 位,并将该记录插入到 project2 表中。 这就是我想出的

DECLARE

       CURSOR dif IS
            SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1
            WHERE CUST_CODE IN (SELECT CUST_CODE FROM CUST_ALL);

BEGIN

        FOR a in dif LOOP

            IF SUBSTR(a.CUST_CODE, 10)=null
            THEN
            INSERT INTO project2 (cust_code)
            VALUES(a.CUST_CODE);           
            END IF;
        END LOOP;
        commit;

END;

脚本运行没有错误,但没有任何反应。在 substr 函数上,当我选择与 NULL 不同的值时,它会起作用。我不知道如何检查第 8 位是否丢失。

阿萨夫。

【问题讨论】:

  • 在plsql中something=null总是假的,你需要something IS null
  • @A.B.Cade:我认为这几乎是任何 SQL,而不仅仅是 PL/SQL。 :)
  • @Neolisk,感谢您的评论,您当然是对的

标签: oracle plsql substr


【解决方案1】:

您的脚本由于以下行而无法运行:

IF SUBSTR(a.CUST_CODE, 10)=null

在 plsql 中 <something> = null 将始终为 FALSE。 你应该写:

IF SUBSTR(a.CUST_CODE, 10) IS null

但实际上你并不真正需要 plsql,你可以用一个 sql 命令来完成:

INSERT INTO project2 (cust_code)
SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1
            WHERE CUST_CODE IN (SELECT CUST_CODE FROM CUST_ALL)
              AND SUBSTR(a.CUST_CODE, 10) IS null;

【讨论】:

  • 谢谢! IS null 确实有所作为。我正在尝试学习 pl/sql,这个特定的小脚本只是一个稍微大一点的脚本的开始,它将使工作中的一些事情变得更容易。再次感谢(:
【解决方案2】:

根据你的情况试试这个:

IF LENGTH(a.CUST_CODE) = 10 AND SUBSTR(a.CUST_CODE,-1,10) = '0'

(检查长度是否为10,最后一个字符是否为0)

【讨论】:

  • 非常感谢。不知道非常有用的 LENGTH 函数(:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2015-06-01
  • 2018-11-17
  • 2018-11-20
相关资源
最近更新 更多