我在TOAD里新创建了一个function,怎么提交到服务器里啊?
另求TOAD使用教程
谢谢!

解决方案 »

  1.   

    只要toad连接了数据库,直接执行创建function的脚本就可以了。给你个例子:
    CREATE SEQUENCE seq_2;
    CREATE OR REPLACE FUNCTION GET_STR RETURN VARCHAR2 IS
      C_R VARCHAR2(9);
      I   NUMBER;
    BEGIN
      SELECT SEQ_2.NEXTVAL INTO I FROM DUAL;
      IF (MOD(I, 1000) = 0) THEN
        SELECT SEQ_2.NEXTVAL INTO I FROM DUAL;
      END IF;
      C_R := 'D00' || LPAD(I, 6, '0');
      RETURN(C_R);
    END GET_STR;
    /SELECT GET_STR() FROM dual;
      

  2.   

    我在代码里直接用,他说这个function标识无效
      

  3.   

    看下,你的function有没有写错,具体格式:
    CREATE OR REPLACE FUNCTION GET_XXX_FLAG
       RETURN varchar2
    IS
       maxflag varchar2(100);
    BEGIN      SELECT TO_CHAR(max(MODIFIEDTIME),'yyyymmddhh24miss')
            INTO maxflag
            FROM XXX;      RETURN NVL (maxflag,'20000101');
       EXCEPTION
          WHEN OTHERS
          THEN
             RETURN '20000101';END;
      

  4.   

    CREATE OR REPLACE FUNCTION f_get_persons_f_name(P_FLIGHT_DATE in date, P_CREW_LINK_LINE in number, P_MODULE_FLAG in CHAR) return varchar2 is
      Result varchar2(300);
      ls_name varchar2(300);  LS_TECH_NO varchar2(10);
      li_count number(10);
      LI_CS NUMBER(3);
      CURSOR myCur1 IS
          SELECT T3005.P_CODE,T3017.C_NAME,T3005.Ts_Flag,T3005.RANK_NO,
                 T3001.AC_TYPE,T3001.RANDOM
          FROM T3001,T3005, T3017
         WHERE T3001.FLIGHT_DATE = T3005.FLIGHT_DATE
           and T3001.CREW_LINK_LINE = T3005.CREW_LINK_LINE
           and T3017.P_CODE = T3005.P_CODE
           and T3005.FLIGHT_DATE = p_flight_date
           and T3005.CREW_LINK_LINE = p_crew_link_line
           and P_MODULE_FLAG like 'F%'
         ORDER BY DECODE(decode(T3005.RANK_NO, 'FP', 'A', T3005.Module_Flag), 'F', 1, 'C', 2, 3) ASC,
            NVL(T3005.SERIAL_NO,99) ASC ,
                  T3005.rank_no ASC ;
                  
                 
                  
    BEGIN
      Result    := '';
      ls_name   := '';
      LI_CS := 0;
      
      FOR lp1 IN myCur1 LOOP       BEGIN
             SELECT T3009.tech_no_Z
               INTO LS_TECH_NO
               FROM T3009
              WHERE T3009.p_code = lp1.P_CODE
                AND T3009.ac_type = lp1.AC_TYPE
                AND T3009.tech_no_Z IS NOT NULL;
          EXCEPTION
             WHEN NO_DATA_FOUND
             THEN
                LS_TECH_NO := '' ;
                END ;      
      --sj
       li_count := 0;
           BEGIN
             SELECT count(*) 
               INTO li_count  
               FROM "T3005","T3009"  
              WHERE ( "T3005"."P_CODE" = "T3009"."P_CODE" )
                AND ( "T3005"."FLIGHT_DATE" = p_flight_date )  
                AND ( "T3005"."CREW_LINK_LINE" = p_crew_link_line )
                AND ( "T3009"."AC_TYPE" = lp1.AC_TYPE )
                AND ( ("T3009"."TECH_NO_Z" = 'Z001') OR 
                      ("T3009"."TECH_NO_Z" = 'Z002') OR 
                      ("T3009"."TECH_NO_Z" = 'Z003') ) ;
           EXCEPTION
             WHEN NO_DATA_FOUND
             THEN
                li_count := 0 ;
                END ;  
                     
          IF lp1.Ts_Flag = 'A' THEN 
                ls_name := lp1.C_NAME||'(监)'; --监视督察员
          ELSIF lp1.Ts_Flag = 'C' THEN 
                ls_name := lp1.C_NAME||'(检)';   --检察员
          ELSIF lp1.Ts_Flag = 'c' THEN 
                ls_name := lp1.C_NAME||'(受检)'; --受检
          ELSIF lp1.Ts_Flag = 'T' THEN 
                ls_name := lp1.C_NAME||'(教)';   --教员
          ELSIF lp1.Ts_Flag = 't' THEN 
                ls_name := lp1.C_NAME||'(学)';   --学员
          ELSIF lp1.Ts_Flag = 'R' THEN 
                ls_name := lp1.C_NAME||'(报)'; --报务员
          ELSIF lp1.Ts_Flag = 'B' THEN 
                ls_name := lp1.C_NAME||'(专报教)'; --专报教
          ELSIF lp1.Ts_Flag = 'b' THEN 
                ls_name := lp1.C_NAME||'(兼报教)'; --兼报教
          ELSIF lp1.Ts_Flag = 'S' THEN 
                ls_name := lp1.C_NAME||'(专报检)'; --专报检
          ELSIF lp1.Ts_Flag = 's' THEN 
                ls_name := lp1.C_NAME||'(兼报检)'; --兼报检
          ELSIF lp1.RANK_NO = 'A001' THEN
                ls_name := lp1.C_NAME||'*'; --责任机长
          ELSIF lp1.RANK_NO = 'B001' THEN 
                ls_name := lp1.C_NAME||''; --第二机长
          ELSIF lp1.RANK_NO = 'MPS' THEN 
                ls_name := lp1.C_NAME||'*'; --乘务长
          ELSIF lp1.RANK_NO = 'PS' THEN 
                ls_name := lp1.C_NAME||''; --2号位
          ELSIF lp1.RANK_NO = 'ST'   THEN 
                ls_name := lp1.C_NAME||'H'; --乘务员
          ELSIF lp1.RANK_NO = 'SA'   THEN 
                ls_name := lp1.C_NAME||'I'; --安全学员
          ELSIF lp1.RANK_NO = 'SP'   THEN 
                ls_name := lp1.C_NAME||'J';--兼职安全员
          ELSIF ls_tech_no = 'Z014' THEN 
                ls_name := lp1.C_NAME||'N';--新机长
          ELSIF ls_tech_no = 'Z030' THEN 
                ls_name := lp1.C_NAME||'A';--一级副驾驶
          ELSIF ls_tech_no = 'Z029' THEN 
                ls_name := lp1.C_NAME||'B';--二级副驾驶
          ELSIF ls_tech_no = 'Z026' THEN 
                ls_name := lp1.C_NAME||'C';--三级副驾驶
          ELSIF ls_tech_no = 'Z022' AND li_count > 0 THEN 
                ls_name := lp1.C_NAME||'D';--六级副驾驶
           ELSIF ls_tech_no = 'SC'   THEN 
                ls_name := lp1.C_NAME||'H';--乘务学员
          ELSIF ls_tech_no = 'SA'  THEN 
                ls_name := lp1.C_NAME||'I';--安全学员
          ELSE 
                ls_name := lp1.C_NAME;
          END IF;
          --机长换行
          IF (NOT (lp1.RANK_NO = 'A001' or lp1.RANK_NO = 'B001')) AND P_MODULE_FLAG = 'F'  THEN
             IF LI_CS <= 0 THEN 
                ls_name := CHR(13)||CHR(10)||lp1.C_NAME||' ';
             END IF;
             LI_CS := LI_CS + 1;
          END IF;
          
          IF Result is null THEN
             Result := ls_name ;
          ELSE
             Result := Result||' '||ls_name ;
          END IF;
     
      END LOOP;  return(Result);
    END ;
    /帮我看看咯!