CREATE OR REPLACE PROCEDURE PROC_USER_DEP (
 in_user_id in VARCHAR2,
 in_user_pwd in VARCHAR2,
 out_node_id out VARCHAR2,
 out_tree_pk out VARCHAR2,
 out_id out VARCHAR2)
AS
BEGIN
   select t1.node_id,
   t1.TREE_PK
   t2.id into out_id 
   from HBGH_PUB_TREE t1  ,
   (
    select id from Hbgh_User_Info where User_Uid='0311admin' and user_pwd='admin'
   ) t2
   where t1.node_id = 
   (
    select substr(PURVIEWID,1,instr(PURVIEWID,';')-1) powerid from Hbgh_User_Info 
where User_Uid='0311admin' and user_pwd='admin'
   )  ;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END PROC_USER_DEP;

解决方案 »

  1.   

    更正:select t1.node_id into out_node_id ,t1.TREE_PK into t2.id ,t2.id into out_id 问题: 返回是一个记录集,怎么获取一个字段时不报错,如果一起查询几个字段存储过程不能编译
      

  2.   

    在存储过程得主体部分,select语句必须将其选出的值赋给一个变量
    你增加into ……就好了
      

  3.   

    select t1.node_id,t1.TREE_PK,t2.id into out_node_id ,t2.id ,out_id 这是正常写法,但你的后面的T2.ID能不能用别的变量?
      

  4.   

    CREATE OR REPLACE PROCEDURE PROC_USER_DEP (
     in_user_id in VARCHAR2,
     in_user_pwd in VARCHAR2,
     out_node_id out VARCHAR2,
     out_tree_pk out VARCHAR2,
     out_id out VARCHAR2)
    AS
    BEGIN
       select t1.node_id,  t1.TREE_PK ,  t2.id into out_node_id ,out_tree_pk ,out_id 
       from HBGH_PUB_TREE t1  ,
       (
       select id from Hbgh_User_Info where User_Uid='0311admin' and user_pwd='admin'
       ) t2
       where t1.node_id = 
       (
       select substr(PURVIEWID,1,instr(PURVIEWID,';')-1) powerid from Hbgh_User_Info 
    where User_Uid='0311admin' and user_pwd='admin'
       )  ;
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
           NULL;
         WHEN OTHERS THEN
           -- Consider logging the error and then re-raise
           RAISE;
    END PROC_USER_DEP;注意: 要确保查询的结果集只有一条记录
      

  5.   

    CREATE OR REPLACE PROCEDURE PROC_USER_DEP (
     in_user_id in VARCHAR2,
     in_user_pwd in VARCHAR2,
     out_node_id out VARCHAR2,
     out_tree_pk out VARCHAR2,
     out_id out VARCHAR2)
    AS
    BEGIN
       select 
       //说明
       //in_user_id in VARCHAR2 输入参数
       //in_user_pwd in VARCHAR2 输入参数
       //out_node_id  输出参数
       //out_tree_pk  输出参数
       //out_id       输出参数
       //从DB中获取t1.node_id,t1.TREE_PK,t2.id然后分别附值,
       ///////////////////////////////////////////////
       //问题:一条数据可以,第二条数据开始就报错///////
       ////////////////////////////////////////////////
       t1.node_id into out_node_id,
       t1.TREE_PK into out_tree_pk,
       t2.id into out_id 
       
       from HBGH_PUB_TREE t1  ,
       (
        select id from Hbgh_User_Info where User_Uid='0311admin' and user_pwd='admin'
       ) t2
       where t1.node_id = 
       (
        select substr(PURVIEWID,1,instr(PURVIEWID,';')-1) powerid from Hbgh_User_Info 
    where User_Uid='0311admin' and user_pwd='admin'
       )  ;
       
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
           NULL;
         WHEN OTHERS THEN
           -- Consider logging the error and then re-raise
           RAISE;
    END PROC_USER_DEP;
    /
      

  6.   

    用SELECT INTO只能赋一条值啊.
    你想赋两条肯定会报错.
    建议用SELECT COUNT(*) INTO...做条数判断,再进行赋值处理.
      

  7.   

    早晨没看太清楚,不好意思如果select取出来的只是单条记录就可以这样用
    如果是多条记录就只能赋给数组了
      

  8.   

    谢谢各位!
    本处肯定肯定只有单条记录,但是我想要得到几个字段的值,麻烦哪为高手给写出来,比如现在我只有一条记录,但是我需要得到这条记录所包含的字段一,字段二....等等,我上面写的Procedure也是想达到这个目的,请哪为高手直接给我写出来.
    谢谢!
      

  9.   

    CREATE OR REPLACE PROCEDURE PROC_USER_DEP (
     in_user_id in VARCHAR2,
     in_user_pwd in VARCHAR2,
     out_node_id out VARCHAR2,
     out_tree_pk out VARCHAR2,
     out_id out VARCHAR2)
    AS
    BEGIN
       select t1.node_id,
       t1.TREE_PK
       t2.id into out_id, out_tree_pk, out_id
       from HBGH_PUB_TREE t1  ,
       (
       select id from Hbgh_User_Info where User_Uid='0311admin' and user_pwd='admin'
       ) t2
       where t1.node_id = 
       (
       select substr(PURVIEWID,1,instr(PURVIEWID,';')-1) powerid from Hbgh_User_Info 
    where User_Uid='0311admin' and user_pwd='admin'
       )  ;
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
           NULL;
         WHEN OTHERS THEN
           -- Consider logging the error and then re-raise
           RAISE;
    END PROC_USER_DEP;