create or replace procedure pd (cname in varchar2(55))
is
age_  int
begin
select age into age_ from student where name=cname;
end;
/ 为什么编译老是通不过啊,

解决方案 »

  1.   

    procedure定义参数的时候不需要指定长度
    这样就ok了
    create   or   replace   procedure   pd   (cname   in   varchar2) 
    is 
    age_     int 
    begin 
    select   age   into   age_   from   student   where   name=cname; 
    end;
      

  2.   

    再加上2楼的,另外,age_     int这句后面要有分号。
      

  3.   

    谢谢了,已经解决, 但是用declare 调用怎么调用啊??
      

  4.   

    类似这样的写法来调用就可以了.
    当然不止这一种.
    declare
    v_param varchar2(200);--定义变量
    begin
    v_param:='Printing test!';--给变量赋值
    dbms_output.put_line(v_param);--调用存储过程dbms_output.put_line并传入参数
    end;
      

  5.   

    declare
      cname varchar2(55) := ''
    begin
      pd(cname);
    end;
      

  6.   

    创建表的代码:CREATE TABLE Student
    (
        SID VARCHAR(20),
        Age INT,
        SName   VARCHAR(20)
    );
    创建存储过程的代码:CREATE OR REPLACE PROCEDURE pd(cname VARCHAR2) IS
    age_ INT;
    BEGIN
      SELECT  age into age_ from Student where sname=cname;
    END pd;
    执行存储过程:在SQL*PLus中写一个PL/SQL块DECLARE
        -- 定义变量
        v_param VARCHAR(200);
    BEGIN
        --变量赋值并调用存储过程
        v_param := '张三';
        exec pd(v_param);
    END;
      

  7.   

    执行存储过程:DECLARE
        -- 定义变量
        v_param VARCHAR(20) := 'aa';
    BEGIN    
        pd(v_param);
    END;