需求如下:系统有一黑名单帐户的基础表A,系统转账的收款账号在黑名单里,返回1,不在黑名单里返回0

解决方案 »

  1.   

    函数可能会降低查询的效率,还是关联个表比较巴适。--创建一张黑名单测试表
    CREATE TABLE A(
        username VARCHAR2(100)
    );
    --下面语句编造2,4,5....100的一些模拟黑名单
    BEGIN
     FOR i IN 1..100 LOOP
       IF MOD(i,2)=0 THEN
         INSERT INTO a VALUES (i);
       END IF;
     END LOOP;
    END;
    SELECT * FROM a;--创建函数
    CREATE OR REPLACE FUNCTION F_isBlackList(PRM_username VARCHAR2) RETURN NUMBER IS
      F_FLAG NUMBER(4);
    BEGIN
        SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END
          INTO F_FLAG
          FROM A
         WHERE A.USERNAME = PRM_USERNAME;
        RETURN F_FLAG;
    END F_isBlackList;
    /
    --测试结果
    SELECT F_isBlackList('1') FROM DUAL;
    SELECT F_isBlackList('2') FROM DUAL;
      

  2.   

    1、判断A表里面有几个这样子的收款帐号
    SELECT 
          SUM (CASE WHEN NAMEID = '传过来的系统转账的收款账号'
               THEN 1 ELSE 0 
               END) AS 有几个这样子的收款帐号 
    FROM 黑名单帐户的基础表A
    2、判断A表里面是否有这样子的收款帐号(这是模糊判断你传过来的帐号)
    SELECT 
    CASE WHEN COUNT(*) > 0 
    THEN 1 ELSE 0 
    END  
    FROM A表
    WHERE NAMEID LIKE '传过来的系统转账的收款账号'
    3、如果帐号是确定的,并且A表里面不存储相同的帐号,那么直接COUNT(*)就行了:
    SELECT COUNT(*)
    FROM A表
    WHERE NAMEID = '传过来的系统转账的收款账号'