suser varchar2(100);
 
  select sys_context('userenv', 'current_user')
    into suser 
    from dual;
declare
     cursor YSSQL is 
     SELECT Bgt_Set_Code, Dim_Type, Dim_Type_Name, Dim_ID
        FROM  sUser.Tbl_Pla_DimType
       Where Dim_ID NOT IN
             (SELECT OBJECT_ID
                FROM pla.HSP_OBJECT
               WHERE (OBJECT_TYPE =
                     (SELECT OBJECT_TYPE
                         FROM pla.HSP_OBJECT_TYPE
                        WHERE (TYPE_NAME = 'Dimension'))) AND (OBJECT_ID = 33 OR 
                      LENGTH(OBJECT_ID) > 4)) And (Bgt_Set_Code = RTRIM(sBgt_Set_Code))
       ORDER BY DIM_TYPE;
  begin
    Open YSSQL;
    for cDimType in YSSQL loop
    end loop;
  end;
suser 是定义的一个变量,通过系统函数得到当前用户名.但是编译时总是提示找不到表或视图?如何解决?

解决方案 »

  1.   

    "SELECT Bgt_Set_Code, Dim_Type, Dim_Type_Name, Dim_ID
            FROM  sUser.Tbl_Pla_DimType"
    觉得你这个用法不妥,suser是个变量,你这里应该是要用一个用户,
    写成这样试试:
    "SELECT Bgt_Set_Code, Dim_Type, Dim_Type_Name, Dim_ID
            FROM" || sUser ||".Tbl_Pla_DimType"
      

  2.   

    你是说把SELECT 语句放到字符串里还是把整个游标都放到字符串里?
      

  3.   

    vSql := 'select ownerno into vTemp from ' 
                  || vUser|| '.t_sce_dz_ownerno'
      

  4.   

    declare
         cursor YSSQL is 
        STR:=' SELECT Bgt_Set_Code, Dim_Type, Dim_Type_Name, Dim_ID
            FROM'|| sUser||'.Tbl_Pla_DimType
           Where Dim_ID NOT IN
                 (SELECT OBJECT_ID
                    FROM pla.HSP_OBJECT
                   WHERE (OBJECT_TYPE =
                         (SELECT OBJECT_TYPE
                             FROM pla.HSP_OBJECT_TYPE
                            WHERE (TYPE_NAME = 'Dimension'))) AND (OBJECT_ID = 33 OR 
                          LENGTH(OBJECT_ID) > 4)) And (Bgt_Set_Code = RTRIM(sBgt_Set_Code))
           ORDER BY DIM_TYPE';
      EXECUTE IMMEDIATE STR;
      begin
        Open YSSQL;
        for cDimType in YSSQL loop
        end loop;
      end;
    是这样吗?
      

  5.   

    不在游标里,可以按STEM说的那样做.但是放到游标里这样做好像就不行了.