Oracle备忘录1

数据库管理员:安装升级Oracle数据库建库,表空间,表,视图,索引。。。制定并实施备份和修复计划数据库权限管理,调优,故障排除对于高级DBA,要求参与项目开发,会编写SQL语句,存储过程,触发器,规则,约束,包CREATE TABLE EMP(EMPNO NUMBER(4) PRIMARY KEY,ENAME VARCHAR2(10),JOB VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(4));CREATE TABLE DEPT(DEPTNO NUMBER(4),DNAME VARCHAR2(14),LOC VARCHAR2(13));CREATE TABLE SALGRADE(GRADE NUMBER,LOSAL NUMBER,HISAL NUMBER );CREATE TABLE BONUS(ENAME VARCHAR(10),JOB VARCHAR2(9),SAL NUMBER,COMM NUMBER);INSERT INTO DEPT VALUES (10,‘ACCOUNTING‘,‘NEW YORK‘);INSERT INTO DEPT VALUES (20,‘RESEARCH‘,‘DALLAS‘);INSERT INTO DEPT VALUES (30,‘SALES‘,‘CHICAGO‘);INSERT INTO DEPT VALUES (40,‘OPERATIONS‘,‘BOSTON‘);INSERT INTO EMP VALUES(7369,‘SMITH‘,‘CLERK‘,7902,TO_DATE(‘17-12-1980‘,‘dd-mm-yyyy‘),800,null,20); INSERT INTO EMP VALUES(7499,‘ALLEN‘,‘SALESMAN‘,7698,TO_DATE(‘20-2-1981‘,‘dd-mm-yyyy‘),1600,300,30);INSERT INTO EMP VALUES(7521,‘WARD‘,‘SALESMAN‘,7698,TO_DATE(‘22-2-1981‘,‘dd-mm-yyyy‘),1250,500,30);INSERT INTO EMP VALUES(7566,‘JONES‘,‘MANAGER‘,7839,TO_DATE(‘2-4-1981‘,‘dd-mm-yyyy‘),2975,NULL,20);INSERT INTO EMP VALUES(7654,‘MARTIN‘,‘SALESMAN‘,7698,TO_DATE(‘28-9-1981‘,‘dd-mm-yyyy‘),1250,1400,30);INSERT INTO EMP VALUES(7698,‘BLAKE‘,‘MANAGER‘,7839,TO_DATE(‘1-5-1981‘,‘dd-mm-yyyy‘),2850,NULL,30);INSERT INTO EMP VALUES(7782,‘CLARK‘,‘MANAGER‘,7839,TO_DATE(‘9-6-1981‘,‘dd-mm-yyyy‘),2450,NULL,10);INSERT INTO EMP VALUES(7839,‘KING‘,‘PRESIDENT‘,NULL,TO_DATE(‘17-11-1981‘,‘dd-mm-yyyy‘),5000,NULL,10);INSERT into EMPVALUES(7788,‘SCOTT‘,‘ANALYST‘,7566,‘19-4月-1987‘,3000.00,NULL,20);INSERT INTO EMP VALUES(7844,‘TURNER‘,‘SALESMAN‘,7698,TO_DATE(‘8-9-1981‘,‘dd-mm-yyyy‘),1500,0,30);INSERT INTO EMP VALUES(7900,‘JAMES‘,‘CLERK‘,7698,TO_DATE(‘3-12-1981‘,‘dd-mm-yyyy‘),950,NULL,30);INSERT INTO EMP VALUES(7902,‘FORD‘,‘ANALYST‘,7566,TO_DATE(‘3-12-1981‘,‘dd-mm-yyyy‘),3000,NULL,20);INSERT INTO EMP VALUES(7934,‘MILLER‘,‘CLERK‘,7782,TO_DATE(‘23-1-1982‘,‘dd-mm-yyyy‘),1300,NULL,10);INSERT INTO SALGRADE VALUES (1,700,1200);INSERT INTO SALGRADE VALUES (2,1201,1400);INSERT INTO SALGRADE VALUES (3,1401,2000);INSERT INTO SALGRADE VALUES (4,2001,3000);INSERT INTO SALGRADE VALUES (5,3001,9999);SELECT * FROM DEPT;SELECT * FROM EMP;SELECT * FROM SALGRADE;CREATE USER DB_USER IDENTIFIED BY DB_USER_PW; ——创建数据库/用户,要在system下进行操作DROP USER DB_USER (CASCADE);passw; ——修改用户密码 passw DB_USER; ——管理员修改用户密码ALTER USER DB_USER IDENTIFIED BY DB_USER_PW; ——管理员修改用户密码shutdown;startup;SHOW parameter;赋予权限:前两个要在system下进行操作方法1:GRANT DBA TO DB_USER; ——赋予用户数据库管理权限方法2:GRANT CONNECT TO DB_USER; ——赋予用户连接权限 GRANT RESOURCE TO DB_USER; ——赋予用户资源权限方法3:CONNECT DB_USER/DB_USER_PW as sysdba或者as sysoper; ——连接数据库并赋予权限GRANT CREATE SESSION TO DB_USER; ——赋予用户创建会话的权限,对Oracle数据库暂时不知道怎么用CREATE USER role NOT IDENTIFIED; ——创建角色时不需要输入密码即可登录 显示数据库中所有的用户:SELECT USER NAME FROM dba_USER s;显示数据库中用户的系统权限:SELECT * FROM dba_sys_privs WHERE GRANTee=‘角色名;SELECT * FROM role_sys_privs WHERE role=‘角色名;显示数据库中用户的对象权限:SELECT * FROM dba_tab_privs WHERE GRANTee=‘角色名‘; 显示数据库中用户的角色:SELECT * FROM dba_role_privs WHERE GRANTee=‘用户名‘;显示数据库中用户的权限SELECT * FROM dba_sys_privs Oracle究竟有多少中角色SELECT * FROM dba_roles;Oracle的所有系统权限SELECT * FROM system_privilege_map order BY NAME;Oracle的所有对象权限SELECT DISTINCT privilege FROM dba_tab_privs;显示当前数据库的全称:SELECT * FROM global_NAME;conn sys/change_on_install as sysdba;——作为系统数据库管理员登录DROP TABLE r; ——删除表RENAME r TO r1; ——重命名表名ALTER TABLE r RENAME column A1 TO A2; ——修改表中的列名ALTER TABLE r ADD A D; ——增加列的属性ALTER TABLE r MODIFY A D; ——修改列的属性ALTER TABLE r DROP A; ——删除列的属性INSERT INTO r VALUES(); ——插入元组(表中内容)UPDATE TABLE r SET A WHERE ...; ——更新元组(表中内容)DELETE FROM r WHERE ...; ——删除元组(表中内容),写日志,可恢复TRUNCATE TABLE r;__删除元组(表中内容),速度快,不写日志,不可恢复SHOW linesize; ——显示行的宽度,默认值为80SET linesize NUMBER; ——设置行的宽度为NUMBER SET pagesize NUMBER; ——设置每页显示的行数,默认值为14ALTER SESSION SET nls_date_format=‘yyyy-mm-dd‘; __日期设置成中国人习惯的方式NVL(D,0) ——如何处理空值null--增加约束ALTER TABLE r MODIFY A NOT NULL;--非空ALTER TABLE r ADD CONSTRAINT cardunique UNIQUE(A); --身份证唯一ALTER TABLE r ADD CONSTRAINT ADDresscheck CHECK(A in(‘北京‘,‘上海‘,‘广州‘));--删除约束ALTER TABLE r DROP CONSTRAINT A UNIQUE/CHECK;ALTER TABLE r DROP CONSTRAINT primary key CASCADE;UPDATE r SET A WHERE ...; ——更新元组(表中内容)UPDATE r SET (a1,a2,a3)=(SELECT (A1,A2,A3) FROM r WHERE...) WHERE...;DELETE FROM r WHERE ...; ——删除元组(表中内容)显示当前用户下的所有表:SELECT TABLE_NAME FROM USER _TABLEs;显示当前用户可以访问的所有的表:SELECT TABLE_NAME FROM all_TABLEs;显示数据库中全部的表,必须是dba或者具有SELECT any TABLE的权限SELECT TABLE_NAME FROM dba_TABLEs;CREATE profile failed_login_lock_NAME limit failed_login_attEMPs num1 password_lock_time num2; ——建立输入密码错误次数达到num1时锁定规定时间num2CREATE profile password_life_time_NAME limit password_life_time num1 password_grace_time num2 password_reuse_time NUMBER3; ——建立在num1修改密码,宽限天为num2,在NUMBER3天后可以重用DROP profile profile_NAME(CASCADE); ——删除文件ALTER USER DB_USER profile profile_NAME; ——对某用户实行这一锁定规则 ALTER USER DB_USER account unclok; ——进行解锁 savapoint a;——设置回滚点,保存点,可预防数据库重要信息的丢失,保存点个数没有限制(可以设置多个回滚点)ROLLBACK TO a;——回滚到这个点ROLLBACK;——回滚到最初的状态COMMIT;——提交,每天都必须的操作,但是会删除全部保存点,释放锁,谨慎使用,使用时确保数据库已经不存在问题!分页:ROWNUM经典例句:SELECT * FROM (SELECT a.*,rownum rn FROM (SELECT * FROM EMP) a WHERE rownum<=10) WHERE rn>=6;复制一部分:CREATE TABLE myTABLE(id,NAME) as SELECT EMPno,ename FROM EMP;UNION 合并查询去重 UNION ALL 不去重INTERSECT 交集查询MINUS 差集查询,前面减去两者的交集TO_DATE(‘1991-12-12‘,‘yyyy-mm-dd‘) TO_date(‘1991/12/12‘,‘yyyy/mm/dd‘) ——指定日期格式INSERT inTO EMP VALUES(1235,‘Test_2‘,‘MANAGER‘,7782,TO_date(‘1998-9-9 12:10:10‘,‘yyyy-mm-dd hh24:mi:ss‘),1000,100,10);INSERT inTO EMP VALUES(1236,‘Test_3‘,‘MANAGER‘,7782,sysdate,1000,100,10);SELECT ename,TO_char(hiredate,‘yyyy-mm-dd hh24:mi:ss‘) FROM EMP; ——查询具体时间,小时,分钟,秒,bbs系统常备SELECT ename,TO_char(hiredate,‘yyyy-mm-dd hh24:mi:ss‘),TO_char(sal,‘L99,999.99‘) FROM EMP; ——显示本地货币SELECT * FROM EMP WHERE TO_char(hiredate,‘yyyy‘)=1980; ——显示某一年入职的员工,某一月mm,某一年中的某一月同理yyyy-mmSET TRANSLATE READ ONLY; ——事务处理集函数:LOWER(A);UPPER(A);LENGTH(A);SUBSTR(A,m,n); ——m代表起始位置,n代表取得字符个数完成首字母大写 ——SELECT UPPER(SUBSTR(A,1,1)) FROM EMP;完成后面字母小写——SELECT lower(SUBSTR(A,2,LENGTH(A)-1)) FROM r;合并:SELECT UPPER(SUBSTR(A,1,1))||lower(SUBSTR(A,2,LENGTH(A)-1)) FROM r;REPLACE(A,search_string,REPLACE_string); ——替换字符INSTR(char1,char2,[,n[,m]]; ——取字串在字符串的位置数学函数:ROUND(A,m); ——四舍五入,保留m位TRUNC(A,m);——截取数字,保留m位,忽略余数MOD(A,n);——对A取模nFLOOR(A);——返回小于或者等于n的最大整数,忽略余数CEIL(A);——返回大于或者等于n的最小整数SELECT SYSDATE FROM dual;——返回系统时间SELECT * FROM EMP WHERE sysdate>ADD_months(hiredate,8);返回系统时间8个月之前的员工SELECT trunc(sysdate-hiredate) "入职天数" FROM EMP; ——返回入职天数SELECT hiredate,ename FROM EMP WHERE last_day(hiredate)-2=hiredate; ——返回每月倒数第2天的员工转换函数:TO_char(A,‘‘);TO_date(A,‘‘);系统函数:SELECT sys_context(‘USER env‘,‘db_NAME‘) FROM dual; ——language:当前语言,SESSION_USER :当前用户,current_schema:当前方案进行行迁移:INSERT inTO r2(A1,A2,A3) SELECT a1,a2,a3 FROM r1 WHERE ...;导出:导出表,导出方案,导出数据库EXP命令,要从命令行进入oracle中的bin 目录USER id,TABLEs,owner,full=y,inctype,rows,file导出表的结构而不导入数据:EXP USER id=learning/123456@XE TABLEs=(EMP) file=E:\DeskTop\EMP.dmp rows=n导出表:EXP USER id=learning/123456@XE TABLEs=(EMP) file=E:\DeskTop\EMP.dmp下面这种方式导出快EXP USER id=learning/123456@XE TABLEs=(EMP) file=E:\DeskTop\EMP.dmp direct=y导出方案:EXP USER id=learning/123456@XE owner=learning file=E:\DeskTop\EMP.dmp导出全部:EXP USER id=system/123456@XE full=y inctype=complete file=E:\DeskTop\EMP.dmp导入表的结构,而不导入表的数据:IMP USER id=learning/123456@XE TABLEs=(EMP) file=E:\DeskTop\EMP.dmp rows=n导入表:IMP USER id=learning/123456@XE TABLEs=(EMP) file=E:\DeskTop\EMP.dmp导入数据,如果表已经存在只导入数据:IMP USER id=learning/123456@XE TABLEs=(EMP) file=E:\DeskTop\EMP.dmp ignore y导入表到其他用户IMP USER id=system/123456@XE TABLE=EMP file=E:\DeskTop\EMP.dmp TOUSER =learning;导入数据库:IMP USER id=system/123456@XE full=y file=E:\DeskTop\EMP.dmp TOUSER =learning;建立表空间:CREATE TABLESPACE data01 datafile ‘E:\data01.dbf‘ size 20m uniform size 128k;增加数据文件:ALTER TABLESPACE data01 ADD datafile ‘E:\data02.dbf‘ size 20m;增加数据文件的大小:ALTER TABLESPACE data01 ‘E:\data01.dbf‘ resize 20m;设置文件的自动增长:ALTER TABLESPACE data01 ‘E:\data01.dbf‘ auTOextEND on next 10m maxsize 500m;磁盘损坏时的做法:确定数据文件所在的表空间:SELECT TABLESPACE_NAME FROM dba_data_files WHERE file_NAME=‘E:\data01.dbf‘; 使表空间脱机:ALTER TABLESPACE data01 offline;移动表空间:host move E:\data01.dbf D:\data01.dbf对数据库文件进行逻辑修改:ALTER TABLESPACE data01 RENAME datafile ‘E:\data01.dbf TO D:\data01.dbf‘;使得表空间联机:ALTER TABLESPACE data01 online;使用数据库表空间:CREATE TABLE r(deptno NUMBER(4),dNAME varchar2(14),loc varchar2(13)) TABLESPACE data01;查询表空间中的表: SELECT * FROM all_TABLEs WHERE TABLESPACE_NAME=‘DATA01‘;//注意大写查询表处于哪个表空间:SELECT TABLESPACE_NAME,TABLE_NAME FROM USER _TABLEs WHERE TABLE_NAME=‘EMP‘; //注意大写删除表空间:DROP TABLESPACE DATA01 including contents and datafiles;表级定义:在定义了列之后添加约束列级定义:在定义列的同时添加约束创建一个存储过程,该过程可以向某表中添加记录CREATE TABLE mytest(NAME VARCHAR2(30),password VARCHAR2(30));CREATE OR REPLACE PROCEDURE b ISBEGIN--执行部分INSERT INTO mytest VALUES(‘jack‘,‘123456‘);END;/CREATE OR REPLACE PROCEDURE b ISBEGIN--执行部分DELETE FROM mytest WHERE NAME=‘jack‘;END;/REPLACE表示如果有相同的过程名就替换,b表示过程名查看错误信息:SHOW error;如何调用该过程1:EXEC 过程名(参数值1,参数值2);2:CALL 过程名(参数值1,参数值2);定义常量时,建议用v_作为前缀v_sal定义常量时,建议用c_作为前缀c_rate当定义游标时,建议用_cursor作为后缀EMP_cursor当定义例外时,建议用e_作为前缀e_errorSET serveroutput ON;--开启显示内容SET serveroutput OFF--关闭显示内容BEGINDBMS_OUTPUT.PUT_LINE(‘helloworld‘);END; /--这个最后在加上--显示雇员名,薪水DECLAREv_ename VARCHAR2(5);v_sal NUMBER(7,2);BEGIN SELECT ename,sal INTO v_ename,v_sal FROM EMP WHERE EMPno=&no;--输出DBMS_OUTPUT.PUT_LINE(‘雇员是:‘||v_ename||‘,他的薪水是:‘||v_sal);--异常处理EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE(‘输入有误,请重新输入!‘);END;/案例CREATE PROCEDURE a1(a1name VARCHAR2,a1sal NUMBER) ISBEGIN--执行,根据故原名修改工资UPDATE EMP SET sal=a1sal WHERE ename=a1name; END;/EXEC a1(‘SCOTT‘,150);--这样SCOTT的工资就被修改成了150--采用function来查询某个雇员的工资CREATE FUNCTION fj_fun1(fjname VARCHAR2) RETURN NUMBER IS yearsal NUMBER(7,2);BEGIN--执行部分SELECT sal*12+NVL(comm,0)*12 INTO yearsal FROM EMP WHERE ename=fjname;RETURN yearsal;END;/--调用VAR abc NUMBER;CALL fj_fun1(‘SCOTT‘) INTO:abc;--创建包。声明该包有一个过程update_sal,声明该包有一个函数annual_income:CREATE PACKAGE fj_package ISPROCEDURE update_sal(name VARCHAR2,newsal NUMBER);FUNCTION annual_income(name VARCHAR2) return NUMBER;END;/--给包sp_package实现包体 ,来修改某个雇员的工资或者查询某个雇员的工资CREATE OR REPLACE PACKAGE BODY fj_package IS PROCEDURE update_sal(name VARCHAR2, newsal NUMBER) IS BEGIN UPDATE EMP SET sal = newsal WHERE ename = name; END; FUNCTION annual_income(name VARCHAR2) RETURN NUMBER IS annual_salary NUMBER; BEGIN SELECT sal * 12 + NVL(comm, 0) INTO annual_salary FROM EMP WHERE ename = name; RETURN annual_salary; END; END; / --调用CALL fj_package.update_sal(‘SCOTT‘, 1400);--输入员工号,显示雇员姓名、工资、个人所得税,税率为0.03为例DECLARE c_tax_rate NUMBER(3,2):=0.03;v_name VARCHAR2(5);--EMP.ename%TYPEv_sal NUMBER(7,2);--EMP.sal%TYPEv_tax_sal NUMBER(7,2);BEGIN--执行SELECT ename,sal INTO v_name,v_sal FROM EMP WHERE EMPno=&no;--计算个人所得税v_tax_sal:=v_sal*c_tax_rate;--注意冒号--输出DBMS_OUTPUT.PUT_LINE(‘雇员是:‘||v_name||‘,工资是:‘||v_sal||‘,需要交的个人所得税是:‘||v_tax_sal);END;/--类似于高级语言中的结构体--PL/SQL记录实例DECLARE --表示要定义一个PL/SQL记录类型 EMP_record_type,类型包含name,salary,titleTYPE EMP_record_type IS RECORD(name EMP.ename%TYPE,salary EMP.sal%TYPE,title EMP.job%TYPE);--定义了一个变量,这个变量的类型是EMP_record_typefj_record EMP_record_type;--v_name VARCHAR2(45);BEGINSELECT ename,sal,job INTO fj_record FROM EMP WHERE EMPno=7788;DBMS_OUTPUT.PUT_LINE(‘员工名:‘||fj_record.name||‘,工资是:‘||fj_record.salary);END;/--相当于高级语言中的数组DECLARE--定义了一个PL/SLQL表类型,该类型是用于存放EMP.ename%TYPETYPE fj_TABLE_type IS TABLE OF EMP.ename%TYPEINDEX BY BINARY_INTEGER;--代表下标是按整数排序的,可以为负数fj_TABLE fj_TABLE_type;BEGIN SELECT ename INTO fj_TABLE(0) FROM EMP WHERE EMPno=7788;DBMS_OUTPUT.PUT_LINE(‘员工名:‘||fj_TABLE(0));--下标跟上面的下标一样END;/DECLARE--定义了一个PL/SLQL表类型,该类型是用于存放EMP.ename%TYPETYPE fj_TABLE_type IS TABLE OF EMP.ename%TYPEINDEX BY BINARY_INTEGER;--代表下标是按整数排序的,可以为负数fj_TABLE fj_TABLE_type;BEGIN SELECT ename INTO fj_TABLE(0) FROM EMP;DBMS_OUTPUT.PUT_LINE(‘员工名:‘||fj_TABLE(0));--下标跟上面的下标一样END;/--输入部门号,显示该部门所有员工姓名和他的工资DECLARE --定义游标类型fj_EMP_cursorTYPE fj_EMP_cursor IS REF CURSOR;--定义游标变量test_cursor fj_EMP_cursor;--定义变量v_ename EMP.ename%TYPE;v_sal EMP.sal%TYPE;BEGIN--执行--把test_cursor和一个SELECT结合OPEN test_cursor FOR SELECT ename,sal FROM EMP WHERE deptno=&no;--循环取出LOOPFETCH test_cursor INTO v_ename,v_sal;--判断是否test_cursor是否为空EXIT WHEN test_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(‘雇员名是:‘||v_ename||‘,薪水‘||v_sal);END LOOP;END;/--在上面的基础上,如果某个雇员的工资低于200元,就增加100元DECLARE --定义游标类型fj_EMP_cursorTYPE fj_EMP_cursor IS REF CURSOR;--定义游标变量test_cursor fj_EMP_cursor;--定义变量v_ename EMP.ename%TYPE;v_sal EMP.sal%TYPE;BEGIN--执行--把test_cursor和一个SELECT结合OPEN test_cursor FOR SELECT ename,sal FROM EMP WHERE deptno=&no;--循环取出LOOPFETCH test_cursor INTO v_ename,v_sal;--判断工资高低,决定是否更新--判断是否test_cursor是否为空EXIT WHEN test_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(‘雇员名是:‘||v_ename||‘,薪水‘||v_sal);END LOOP;END;/--编写一个过程,输入雇员名,工资低于2000的雇员工资增加10%CREATE OR REPLACE PROCEDURE fj_pro6(fjname VARCHAR2) IS--定义v_sal EMP.sal%TYPE;BEGIN--执行SELECT sal INTO v_sal FROM EMP WHERE ename=fjname;--判断IF v_sal<2000 THENUPDATE EMP SET sal=sal*1.1 WHERE ename=fjname;END IF;END;/--调用EXEC fj_pro6(‘SCOTT‘);--雇员如果补助为零则加200,如果不为零则加100CREATE OR REPLACE PROCEDURE fj_pro7(fjname VARCHAR2) IS--定义v_comm EMP.comm%TYPE;BEGIN--执行SELECT comm INTO v_comm FROM EMP WHERE ename=fjname;--判断IF v_comm<>0 THENUPDATE EMP SET comm=comm+100 WHERE ename=fjname;ELSE UPDATE EMP SET comm=comm+200 WHERE ename=fjname;END IF;END;/--调用EXEC fj_pro7(‘SCOTT‘);--三个条件分支 IF-THEN-ELSEIF-ELSE--输入雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其它职位的雇员工资增加200。 CREATE OR REPLACE PROCEDURE fj_pro8(fjno NUMBER) IS--定义v_job EMP.job%TYPE;BEGIN--执行SELECT job INTO v_job FROM EMP WHERE EMPno=fjno;IF v_job=‘PRESIDENT‘ THENUPDATE EMP SET sal=sal+1000 WHERE EMPno=fjno;ELSIF v_job=‘MANAGER‘ THENUPDATE EMP SET sal=sal+500 WHERE EMPno=fjno;ELSEUPDATE EMP SET sal=sal+200 WHERE EMPno=fjno;END IF;END;/--调用EXEC fj_pro8(7839);--循环语句 LOOP--users表中,用户编号从1开始增加CREATE TABLE users(userno NUMBER,username VARCHAR2(40));CREATE OR REPLACE PROCEDURE fj_pro9(fjname VARCHAR2) IS--定义:=表示赋值v_num NUMBER:=1;BEGINLOOPINSERT INTO users VALUES(v_num,fjname);--判断退出条件EXIT WHEN v_num=10;--自增v_num:=v_num+1;END LOOP;END;/--调用EXEC fj_pro9(‘root1‘);--这样表中会有十个username为root1的元组CREATE OR REPLACE PROCEDURE fj_pro10(fjname VARCHAR2) IS--定义:=表示赋值v_num NUMBER:=11;BEGINWHILE v_num<=20 LOOPINSERT INTO users VALUES(v_num,fjname);v_num:=v_num+1;END LOOP;END;/--调用EXEC fj_pro10(‘root1‘);

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。