设为首页 收藏本站
查看: 1187|回复: 0

[经验分享] SQL编程实战-使用SQL*Plus

[复制链接]

尚未签到

发表于 2018-10-21 11:39:31 | 显示全部楼层 |阅读模式
  使用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 dual
  SQL>c/GEGIONS_COPY/REGIONS_COPY
  1* select dbms_metadata.get_ddl('TABLE','REGIONS_COPY','HR') from dual
  SQL> LIST
  1* select dbms_metadata.get_ddl('TABLE','REGIONS_COPY','HR') from dual
  (1)常用编辑命令
  A[PPEND] text        将text附加到当前行之后
  C[HANGE] /old/new    将当前行的old替换为new
  CL[EAR] BUFF[ER]       清除缓冲区中的所有行
  DEL            删除当前行
  DEL x            删除第x行
  L[IST]            列出缓冲区中的所有行
  L[IST] x            列出第x行
  R[UN]            运行缓冲区中保存的语句
  /            同上
  x            将第x行作为当前行
  SQL> l
  1 SELECT EMAIL
  2* FROM EMPLOYEES
  SQL> l 1
  1* SELECT EMAIL
  SQL>APPEND, SALARY
  1* SELECT EMAIL, SALARY
  SQL> 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 dual
  SQL>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 filename
  SPOOL  OFF将输出的内容写入文件中
  SQL>EDIT
  在LINUX中默认为vi编辑器,在Windows中默认为Notepad编辑器。
  修改默认编辑器
  DEFINE  _EDITOR = 'editor'
  DEFINE   _EDITOR = 'vi'
  4、格式化列
  COLUMN  {column|alias}[option]
  指定要格式化的列名
  指定要格式化的列的别名
  选项
  选项option
  FOR[MAT] format    指定列的显示格式,由format确定
  HEA[DING] heading    列标题
  JUS[TIFY]        列的输出的对齐方式
  [{left|center|right}]
  WRA[PPEND]    将一个字符串的末尾换行显示
  WORD_WRAPPED    同上,保证单个单词不能跨行
  CLE[AR]   清除列的任何设置为默认
  对于format

  •   1、对于字符串,可以使用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_id
  SQL> UNDEFINE v_date
  SQL> UNDEFINE v_password
  SQL> UNDEFINE v_product_id
  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>
  -- 添加页眉和页脚
  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> HELP
  SQL> HELP INDEX
  SQL> 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.


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624450-1-1.html 上篇帖子: 24.dubbo脚本之server.sh-8159085 下篇帖子: mysql5.7 sql_model 问题:ONLY_FULL_GROUP_BY
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表