以前没用过,现在公司用这个东西了,我很郁闷
1.----------------执行存储过程语句-------------------
execute add_students 1,'张三','123456789'----------------创建的存储过程---------------------
create or replace procedure Add_Students(ids number,names varchar2,phones varchar2)isid2 number;
name2 varchar2(10);
phone2 varchar2(20);beginid2 := ids;
name2 := names;
phone2 := phones;insert into Students (id,name,phone) values (id2,name2,phone2);end ;一运行就出错,哪里写错了??   ids是传进来的参数,id2相当于临时变量?  不知道我理解的对不对。
------------------------------------------------------------
2.请教下试图要如何创建,最好能给写个简单的就好。------------------------------------------------------------
3.Oracel在创建列的时候   建立了id列   能不能让它像sqlserver  一样    每次插入新纪录的时候,id自动增长1
------------------------------------------------------------
4.创建索引的时候除了列,还有个名称?  这个名称是干啥的
------------------------------------------------------------
5.select row_number() over(order by id) row_id,* from students
为啥这样写就报错,缺失表达式
select row_number() over(order by id) row_id,name from students
如果这样子写,name列里的值都变成system了。不是该有的汉字了麻烦有好心的详细给解释下小弟先谢谢了

解决方案 »

  1.   

    1.要加括号
    execute add_students(1,'张三','123456789')
    2.创建视图
    create view v_students as select id,name from Students ;
    3.oracle自增长较麻烦,需要预先建立序列,然后取序列值作为ID,要实现自增长,需要建立一个触发器
    --建立序列
    create sequence seq_stu start with 1 increment by 1;
    --建立触发器
    create or replace trigger tr_stu
    before insert on students
    for each row
    begin
         select seq_stu.nextval into :new.id from dual;
    end;4.这样
    select row_number() over(order by id) row_id, t.* from students t
      

  2.   

    1.存储过程的执行语句如果没参数则直接:
    begin
       execute add_students();
    end;
    2.存储过程的格式不对,参数应该申明是输入入或者输出参数;create or replace procedure Add_Students(ids in number,names out varchar2,phones out varchar2)is --这里用 as  不是is
    begin
       在这里面进行过程处理....
    end;
    3.oracle 用的是 序列 插入数据时指定序列的下一个值:如 序列名.nextval4.为什么要索引名,我想问出这个问题你应该需要很大的勇气,你的名字干嘛用的呢?
    索引也是要维护的,用名字日后维护起来才方便..这只是一点.如果索引多了总得有个东西来区分吧.
    5. row_number函数对重复数据排序也不同
    select ename,sal,row_number() over( order by sal desc) as rank from emp;--排序,数据重复排序不同
    再好好理解一下吧..这东西其实不难..做好一个其他的就容易了.加油吧!!
      

  3.   

    execute Add_Students(1,'张三','123456789')create or replace procedure Add_Students(ids in number,names in varchar2,phones in varchar2)asid2 number;
    name2 varchar2(10);
    phone2 varchar2(20);beginid2 := ids;
    name2 := names;
    phone2 := phones;insert into Students (id,name,phone) values (id2,name2,phone2);end ;还是报错  无效的sql语句
      

  4.   

    insert into Students (id,name,phone)  values (1,'张三','123456789')
    单独执行呢,成功么?》
      

  5.   

    create or replace procedure Add_Students(ids in number,names in varchar2,phones in varchar2)
    as
    begin
    insert into Students (id,name,phone) values (ids,names,phones);
    EXCEPTION 
    WHEN OTHERS
    DBMS_OUTPUT.PUTLINE('插入异常');
    end ;可以直接使用传入的变量,最好再加上异常捕捉
      

  6.   

    顶一下
      oracle QQ群:54775466
            欢迎您的到来 
                   大家一起探讨。
      

  7.   

    create or replace procedure Add_Students(ids number,names varchar2,phones varchar2)isid2 number;
    name2 varchar2(10);
    phone2 varchar2(20);beginid2 := ids;
    name2 := names;
    phone2 := phones;insert into Students (id,name,phone) values (id2,name2,phone2);end;
    /begin
         add_students(1,'张三','123456789');
    end;
    /
      

  8.   

    create or replace procedure Add_Students(ids in number,names in varchar2,phones in varchar2)
    as
    begininsert into Students (id,name,phone) values (ids,names,phones);end ;begin
        Add_Students(1,'张三','123456789');
    end;
    你贴到你PL/SQL上去运行看看,
    我纠正一点,昨天我说:
    create or replace procedure Add_Students(ids in number,names in varchar2,phones in varchar2)
    as --这里AS 和 is 多可以..呵呵,不好意思
    begin
    ...
    ...
    end;白天上不了网,晚上回家发现本机oracle连接不上,丫的,也没发测试..哎...明天我去办公室帮你看看.
    这个其实挺简单的.好了记得给分噢..我多快把CSDN给荒了.