以前没用过,现在公司用这个东西了,我很郁闷
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.----------------执行存储过程语句-------------------
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了。不是该有的汉字了麻烦有好心的详细给解释下小弟先谢谢了
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
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;--排序,数据重复排序不同
再好好理解一下吧..这东西其实不难..做好一个其他的就容易了.加油吧!!
name2 varchar2(10);
phone2 varchar2(20);beginid2 := ids;
name2 := names;
phone2 := phones;insert into Students (id,name,phone) values (id2,name2,phone2);end ;还是报错 无效的sql语句
单独执行呢,成功么?》
as
begin
insert into Students (id,name,phone) values (ids,names,phones);
EXCEPTION
WHEN OTHERS
DBMS_OUTPUT.PUTLINE('插入异常');
end ;可以直接使用传入的变量,最好再加上异常捕捉
oracle QQ群:54775466
欢迎您的到来
大家一起探讨。
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;
/
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给荒了.