您的位置:首页 > 数据库

SQL编程实战-使用SQL*Plus

2016-07-01 17:38 363 查看
使用SQL*Plus
1、查看表结构SQL> desc regions_copy Name Null? Type ------------------------------------------------- ---------------------------- REGION_ID NOT NULLNUMBER REGION_NAME VARCHAR2(25) 2、编辑SQL语句SQL> list 1 CREATE OR REPLACE PROCEDURE update_product_price ( 2 p_product_id IN products.product_id%TYPE, 3 p_factor IN NUMBER 4 ) AS 5 product_count INTEGER; 6 BEGIN 7 --count the number of products with the 8 --supplied product_id (should be 1 if the product exists) 9 SELECT COUNT(*) 10 INTOproduct_count 11 FROMproducts 12 WHERE product_id = p_product_id; 13 14 --ifthe product exists (product_count =1) then 15 --update that product's price 16 IFproduct_count = 1 THEN 17 UPDATE products 18 SETprice = price * p_factor 19 WHERE product_id = p_product_id ; 20 COMMIT; 21 ENDIF; 22 EXCEPTION 23 WHEN OTHERS THEN 24* ROLLBACK; 25 END update_product_price; SQL> l 1* select dbms_metadata.get_ddl('TABLE','GEGIONS_COPY','HR') from dualSQL>c/GEGIONS_COPY/REGIONS_COPY 1* select dbms_metadata.get_ddl('TABLE','REGIONS_COPY','HR') from dualSQL> LIST 1* select dbms_metadata.get_ddl('TABLE','REGIONS_COPY','HR') from dual (1)常用编辑命令 A[PPEND] text 将text附加到当前行之后C[HANGE] /old/new 将当前行的old替换为newCL[EAR] BUFF[ER] 清除缓冲区中的所有行DEL 删除当前行DEL x 删除第x行L[IST] 列出缓冲区中的所有行L[IST] x 列出第x行R[UN] 运行缓冲区中保存的语句/ 同上x 将第x行作为当前行 SQL> l 1 SELECT EMAIL 2* FROM EMPLOYEESSQL> l 1 1* SELECT EMAILSQL>APPEND, SALARY 1* SELECT EMAIL, SALARYSQL> L 1 SELECT EMAIL, SALARY 2* FROM EMPLOYEES SQL> RUN 1 SELECT EMAIL, SALARY 2* FROM EMPLOYEES 3、保存、检索并运行文件 SQL> select dbms_metadata.get_ddl('TABLE','REGIONS_COPY','HR') from dualSQL>save /s01/regions_copy_get_ddl.sql SQL> get/s01/regions_copy_get_ddl.sql 1* selectdbms_metadata.get_ddl('TABLE','REGIONS_COPY','HR') from dual SAVE filename[{REPLACE|APPEND}] 将sqlplus缓冲区的内容保存到由filename所指定的文件中GET filename 将filename所指定的文件的内容读入sqlplus缓冲区START filename |@ filename 运行文件中的内容,首先读入缓冲区EDIT 打开一个编辑器,编辑缓冲区内容,然后写回缓冲区 SPOOL filenameSPOOL OFF将输出的内容写入文件中 SQL>EDIT 在LINUX中默认为vi编辑器,在Windows中默认为Notepad编辑器。 修改默认编辑器 DEFINE _EDITOR = 'editor'DEFINE _EDITOR = 'vi' 4、格式化列COLUMN {column|alias}[option]指定要格式化的列名指定要格式化的列的别名选项选项optionFOR[MAT] format 指定列的显示格式,由format确定HEA[DING] heading 列标题JUS[TIFY] 列的输出的对齐方式[{left|center|right}]WRA[PPEND] 将一个字符串的末尾换行显示WORD_WRAPPED 同上,保证单个单词不能跨行CLE[AR] 清除列的任何设置为默认

对于format1、对于字符串,可以使用Ax,指定字符的宽度

2、对于数字,可以指定显示格式

3、对于日期,指定显示格式,例如MM-DD-YYYY

5、设置页面大小 SETPAGESIZE 100页面最大大小为50000 6、设置行数大小SETLINESIZE 100 7、清除列格式SQL> COLUMN product_id CLEAR --清除指定列 SQL> CLERA COLUMN --重置列格式,还原默认格式 8、使用变量使用变量变量被创建以后,可以在SQL语句中代替实际值使用。SQLPLUS中可以使用两种基本的变量类型1、临时变量,只在使用它的SQL语句中有效,值不能保留2、已定义变量的值会一直保留到被显式的删除 (1)临时变量& 使用&定义临时变量,后面跟变量名。临时变量 &variable_name
--控制输出行SQL> SET VERIFY OFF --禁止显示原行和新行的信息

SQL> SETVERIFY ON -- 修改变量定义字符SQL> SET DEFINE '#'SQL> SET DEFINE '&'
-- &&防止重复输入
-- 定义变量在SQL语句中,可以在使用变量之前对变量进行定义。在同一个SQL语句中还可以多次使用这个变量。已定义变量会一直保持到显式的将其删除、重定义或退出SQLPLUS为止。使用DEFINE命令定义并查看变量
使用ACCEPT命令定义并设置变量

ACCEPT命令用于等待用户为变量输入一个值。ACCEPT命令既可以将现有的变量设置为一个新值,也可以定义一个新变量。ACCEPT variable_name [type] [FORMAT format] [PROMPT prompt] [HIDE] type:变量类型,可以指定CHAR、NUMBER、DATE默认为CHAR format:指定变量的格式 prompt:提示文本,提示用户输入变量 HIDE:隐藏为变量输入的值,例如密码信息,隐藏符号为*
9i以前显示为***,10g中不显示。 -- 删除已经定义的变量。 SQL>undefine definename;

SQL> UNDEFINE v_customer_idSQL> [b]UNDEFINE v_date[/b]SQL> [b]UNDEFINE v_password[/b]SQL> [b]UNDEFINE v_product_id[/b]
9、创建简单的报表在sqlplus中可以使用临时变量或者已定义变量,这样可以创建脚本来提示用户输入一些变量,然后使用这些变量来生成一些报表。如果需要生成复杂的报表,需要使用oracle reports之类的软件。

-- 脚本中使用accept ACCEPT variable_name [type] [FORMAT format] [PROMAT prompt] [HIDE]

[eg]SQL> ACCEPT v_customer_id NUMBER FORMAT 99 PROMPT 'Customer id'
-- 添加页眉和页脚TTITLE和BTITLE命令可以用来向报表中天剑页眉和页脚。
[eg]
TTITLE LEFT 'Run date:' _DATE CENTER 'Run by the ' SQL.USER ' user '
RIGHT 'Page: ' FORMAT 999 SQL.PNO SKIP 2

Run date: 12-AUG-07 Run by the HR user Page: 1

-- 计算小计break on子句可以让sqlplus根据列值的范围分隔输出结果。compute子句可以让sqlplus计算一列的和两者可以结合使用 BREAK ON product_type_id
COMPUTE SUM OF price ON product_type_id
SET ECHO OFF
SET VERIFY OFF
SET PAGESIZE 50
SET LINESIZE 70
CLEAR COLUMNS
COLUMN price HEADING Price FORMAT $999.99
SELECT product_type_id,name,price
FROM products
ORDER BY product_type_id;

CLEAR COLUMNS

10、从SQL*PLUS获取帮助SQL> HELPSQL> HELP INDEXSQL> help index

Enter Help [topic] for help.

@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW

11、自动生成SQL语句现在想生成一个脚本,删除数据库中所有的表。SQL> select 'DROP TABLE ' || table_name || ';'
2 from user_tables;

'DROPTABLE'||TABLE_NAME||';'
------------------------------------------
DROP TABLE REGIONS;
DROP TABLE LOCATIONS;
DROP TABLE DEPARTMENTS;
DROP TABLE JOBS;
DROP TABLE EMPLOYEES;
DROP TABLE JOB_HISTORY;
DROP TABLE REGIONS_COPY;
DROP TABLE BINARY_TEST;
DROP TABLE COUNTRIES;

9 rows selected.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql plus count