PL/SQL https://www.e-learn.cn/tag/plsql-0 zh-hans PL/SQL开发中动态sql的使用 https://www.e-learn.cn/topic/3565063 <span>PL/SQL开发中动态sql的使用</span> <span><span lang="" about="/user/28" typeof="schema:Person" property="schema:name" datatype="">拈花ヽ惹草</span></span> <span>2020-04-11 15:00:11</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p> <span style="color:#1A1AA6;font-family:monospace;font-size:medium;line-height:normal;"> </span></p> <p>  在Oracle中执行动态SQL的几种方法 </p> <p> 在一般的sql操作中,sql语句基本上都是固定的,如:<br /> SELECT t.empno,t.ename  FROM scott.emp t WHERE t.deptno = 20;<br /> 但有的时候,从应用的需要或程序的编写出发,都可能需要用到动态SQl,如:<br /> 当 from 后的表 不确定时,或者where 后的条件不确定时,都需要用到动态SQL。 </p> <p> 一、使用动态游标实现<br /> 1、声明动态游标<br /> TYPE i_cursor_type IS REF CURSOR;<br /> 2、声明游标变量<br /> my_cursor i_cursor_type;<br /> 3、使用游标<br /> n_deptno:=20;<br /> dyn_select := 'select empno,ename from emp where deptno='||n_deptno;<br /> OPEN my_cursor FOR dyn_select;<br /> LOOP <br />   FETCH my_cursor INTO n_empno,v_ename;<br />   EXIT WHEN my_cursor%NOTFOUND;<br />   --用n_empno,v_ename做其它处理<br />   --....<br /> END LOOP;<br /> CLOSE dl_cursor;<br /> 4、小结:动态游标可以胜任大多数动态SQL的需求了,使用简洁方便居家旅行之必备杀人放火之法宝。 </p> <p> 二、使用 EXECUTE IMMEDIATE<br /> 最早大家都使用DBMS_SQL包,但是太太麻烦了,最终都放弃了。但是自从有了EXECUTE IMMEDIATE之后,但要注意以下几点:<br /> EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。 <br />  使用技巧 </p> <p> 1. <span style="color:#009900;">EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交</span> 如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据 </p> <p> 2. 不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REF cursors. </p> <p> 3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号. </p> <p> 4. 在Oracle手册中,未详细覆盖这些功能。下面的例子展示了所有用到Execute immediate的可能方面.希望能给你带来方便. </p> <p> 5. 对于Forms开发者,当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功能. </p> <p> EXECUTE IMMEDIATE用法例子 </p> <p> 1. 在PL/SQL运行DDL语句 </p> <p> <br />  begin<br />   execute immediate 'set role all';<br />  end; </p> <p> 2. 给动态语句传值(USING 子句) </p> <p> <br />  declare<br />   l_depnam varchar2(20) := 'testing';<br />   l_loc    varchar2(10) := 'Dubai';<br />   begin<br />   execute immediate 'insert into dept values  (:1, :2, :3)'<br />     using 50, l_depnam, l_loc;<br />   commit;<br />  end; </p> <p> 3. 从动态语句检索值(INTO子句) </p> <p> <br />  declare<br />   l_cnt    varchar2(20);<br />  begin<br />   execute immediate 'select count(1) from emp'<br />     into l_cnt;<br />   dbms_output.put_line(l_cnt);<br />  end; </p> <p> 4. 动态调用例程.例程中用到的绑定变量参数必须指定参数类型.黓认为IN类型,其它类型必须显式指定 </p> <p>  declare<br />   l_routin   varchar2(100) := 'gen2161.get_rowcnt';<br />   l_tblnam   varchar2(20) := 'emp';<br />   l_cnt      number;<br />   l_status   varchar2(200);<br />  begin<br />   execute immediate 'begin ' || l_routin || '(:2, :3, :4); end;'<br />     using in l_tblnam, out l_cnt, in out l_status; </p> <p>   if l_status != 'OK' then<br />      dbms_output.put_line('error');<br />   end if;<br />  end; </p> <p> 5. 将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量 </p> <p> <br />  declare<br />     type empdtlrec is record (empno  number(4),ename  varchar2(20),deptno  number(2));<br />     empdtl empdtlrec;<br />  begin<br />     execute immediate 'select empno, ename, deptno '||'from emp where empno = 7934'<br />     into empdtl;<br />  end; </p> <p>   </p> <p> 6. 传递并检索值.INTO子句用在USING子句前 </p> <p>  declare<br />    l_dept    pls_integer := 20;<br />    l_nam     varchar2(20);<br />    l_loc     varchar2(20);<br />  begin<br />     execute immediate 'select dname, loc from dept where deptno = :1'<br />        into l_nam, l_loc<br />        using l_dept ;<br />  end; </p> <p> 7. 多行查询选项.对此选项用insert语句填充临时表,用临时表进行进一步的处理,也可以用REF cursors纠正此缺憾.<br />  <br />  declare<br />   l_sal   pls_integer := 2000;<br />  begin<br />   execute immediate 'insert into temp(empno, ename) ' ||<br />                    '          select empno, ename from emp ' ||<br />                    '          where  sal &gt; :1'<br />     using l_sal;<br />   commit;<br />  end; </p> <p>        对于处理动态语句,EXECUTE IMMEDIATE比以前可能用到的更容易并且更高效.当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常. </p>                  <p> <span></span> </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/125782/blog/147086</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/dongtaisql" hreflang="zh-hans">动态SQL</a></div> </div> </div> Sat, 11 Apr 2020 07:00:11 +0000 拈花ヽ惹草 3565063 at https://www.e-learn.cn 上有政策下有对策,纯绿色j2ee开发环境搭建 https://www.e-learn.cn/topic/1698819 <span>上有政策下有对策,纯绿色j2ee开发环境搭建</span> <span><span lang="" about="/user/89" typeof="schema:Person" property="schema:name" datatype="">巧了我就是萌</span></span> <span>2019-12-05 10:43:04</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p> 最近公司里给配了电脑,很happy的使用着,然后发现各种禁用,注册表不能改,软件不能装,我写个环境变量都不行,擦!!!问候维护的主治大夫!!!!重装?当然不行,公司内网会连不上的,连个无线网还要证书,尼玛证书跟域名绑定在一起的,我要是不用公司内网的域名,我这台电脑就是个连不上网的废物,所有的源代码,包括开发都只能远程连到服务器上分配出来的虚拟机上。擦!!!!问候维护的主治大夫!!!!! </p> <p> 上有政策下有对策,我就喜欢在本地做怎么了?虚拟机慢的要死,跑个case的时间我都可以看完一整部哈利波特了。便便最不喜欢的就是守规矩,所以,嘿嘿嘿,让我们来做×爱做的事情吧。 </p> <p> 整个环境是这样的 JDK+Eclipse+tomcat+oracle Cline+PL/SQL+mysql+php+nginx+firefox<br /> 全部绿色,绝对环保。 </p> <p> JDK1.6还是JDK7无所谓,你自己选择,网上有绿色版的,或者直接从安装好的电脑上打包过来也行。<br /> 先将JDK解压,比如解压到D盘,D:/JDK.<br /> Eclipse本来就是绿色的,我选用的是kepler,eclipse4.3。解压以后,找到eclipse.ini文件,在文件开头加入下面这句话<br /> -vm<br /> D:/JDK/bin/javaw.exe<br /> 路径以自己的实际路径修改<br /> 绿色版的tomcat6.0网上有,自己找资源,解压tomcat,在bin文件夹下找到所有的.bat文件,编辑,先不要打开,注意是编辑.bat文件,用记事本就行<br /> 在第一句if后面,添加<br /> SET JAVA_HOME=D:\JDK<br /> SET CATALINA_HOME=D:\tomcat<br /> 这两句路径根据自己的实际路径修改<br /> OracleCline这个花了点小功夫,不过捏,小场面,去oracle官网下载一个instantclient-basic-win32-10.2.0.5.zip,这个是对应oracle10g的版本,如果是对应oracle8i-11g的请下载11.1.1的版本。解压文件,在根目录下添加NETWORK文件夹,NETWORK文件夹下添加ADMIN文件夹,ADMIN文件夹里面放tnsnames.ora文件,这个就是你链接oracle的tns配置文件,问你的同事要或者自己写都行。<br /> 绿色的PLSQL网上有,自己找,解压文件后,在根目录下,新建一个plsqlrun.bat文件,编辑,写入下面这几行<br /> set ORACLE_HOME=D:\instantclient11\instantclient_11_1<br /> set TNS_ADMIN=D:\instantclient11\instantclient_11_1<br /> set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br /> plsqldev.exe </p> <p> oracle客户端的路径请根据实际情况修改。<br /> 照理说应该就基于oracle的开发没有问题了。有的人要是用的是mysql肿么办?没关系,绿色版的mysql,官网直接有的下载,就是最新版的大了点,下个mysql5.1noinstall的版本就行。解压,bin目录下新建一个mysqlrun.bat文件,编辑。<br /> mysqld --console<br /> 然后默认root权限,密码为空,如果要改密码的,自己google,这个不是这篇文章的重点。<br /> 有了mysql不能没有管理工具啊,虽说命令提示符挺好玩的。但是开发是讲效率的,你可以去下载一个mysql-font的绿色版,当然便便最爱折腾了,选择nginx+php+phpadmin管理mysql。<br /> nginx绿色的解压直接用,php绿色,解压直接用,两个放一起,配置自己google,关键字nginx php。phpadmin放php项目根目录下,怎么玩的自己google。<br /> firefox,便便在这里推荐一个下载地址,解压缩后直接装firebug。<br /><a href="http://www.getssh.com/ssh1.html" rel="nofollow">http://www.getssh.com/ssh1.html</a><br /> 这个站上的ff直接可以翻墙用,不要太邪恶哟。。。。。<br /> 然后再推荐两个j2ee ssh开发的插件,集成到eclipse上,跟myeclipse一样用,spring ide,hibernate tools,jboss tools集成hibernate tools。 </p> <p> 本篇中使用的所有的软件都是绿色的,解压直接可以使用,不需要什么绿化.bat啊,什么绿色安装.exe,什么注册.reg。如果下载的绿色版中有以上几个字的,删掉,因为便便的环境不需要改注册表。<br /><br /> 再次呼吁一下,工欲善其事,必先利其器。磨刀不误砍柴,你不让我用工具,我有的是办法。看谁玩得过谁。 </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/1254601/blog/159435</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/lusejdk" hreflang="zh-hans">绿色JDK</a></div> <div class="field--item"><a href="/tag/eclipse" hreflang="zh-hans">eclipse</a></div> <div class="field--item"><a href="/tag/tomcat" hreflang="zh-hans">Tomcat</a></div> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/mysqlphpnginx" hreflang="zh-hans">mysql+php+nginx</a></div> </div> </div> Thu, 05 Dec 2019 02:43:04 +0000 巧了我就是萌 1698819 at https://www.e-learn.cn Oracle之PL/SQL学习笔记之数据类型(三) https://www.e-learn.cn/topic/1668348 <span>Oracle之PL/SQL学习笔记之数据类型(三)</span> <span><span lang="" about="/user/128" typeof="schema:Person" property="schema:name" datatype="">别等时光非礼了梦想.</span></span> <span>2019-12-05 05:21:04</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h1_1"></span> <h1><strong>Oracle之PL/SQL学习笔记之数据类型(三)</strong></h1> <p>        所有的编程语言中变量是使用最频繁的。PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到动态执行程序,同时也可以利用变量在PL/SQL内部进行值得传递,甚至可以把值传递出去,最终返回给用户,由此可见,变量是PL/SQL不可或缺的一部分。<br /></p> <p><span style="font-size: 12.5px;"><br /></span></p> <span id="OSC_h2_2"></span> <h2><strong><span style="font-size: 24px;">1. Oracle预定义的普通数据类型(常见的数据类型)</span></strong></h2> <table><tbody><tr><td style="word-break: break-all;">类型</td> <td style="word-break: break-all;">子类</td> <td style="word-break: break-all;">说明<br /></td> <td style="word-break: break-all;">Oracle中的范围</td> </tr><tr><td style="word-break: break-all;">char<br /></td> <td style="word-break: break-all;"><p>Character,<span style="font-size: 12.5px;">String</span></p><p>Rowid,<span style="font-size: 12.5px;">Nchar</span></p></td> <td style="word-break: break-all;">定长字符串<br /><p><span style="font-size: 12.5px;">民族字符集</span><br /></p></td> <td style="word-break: break-all;">2000(缺省值1)<br /></td> </tr><tr><td style="word-break: break-all;">varchar2</td> <td style="word-break: break-all;"><p>varchar,String</p><p>,Nvarchar2</p></td> <td style="word-break: break-all;"><p>可变字符串</p><p>民族语言字符集</p></td> <td style="word-break: break-all;">4000</td> </tr><tr><td style="word-break: break-all;">Binary_integer<br /></td> <td><br /></td> <td style="word-break: break-all;">带符号整数,为整数计算优化性能</td> <td><br /></td> </tr><tr><td style="word-break: break-all;">number(s,p)<br /></td> <td style="word-break: break-all;">double,integer,int</td> <td><br /></td> <td><br /></td> </tr><tr><td style="word-break: break-all;">Long</td> <td><br /></td> <td style="word-break: break-all;">变长字符串</td> <td style="word-break: break-all;">32767</td> </tr><tr><td style="word-break: break-all;">date</td> <td><br /></td> <td style="word-break: break-all;">日期型</td> <td style="word-break: break-all;"><br /></td> </tr><tr><td style="word-break: break-all;">ROWID</td> <td><br /></td> <td style="word-break: break-all;">存放数据库行号</td> <td style="word-break: break-all;"><br /></td> </tr><tr><td style="word-break: break-all;">URowid</td> <td><br /></td> <td style="word-break: break-all;">通用行标识符,字符串类型</td> <td style="word-break: break-all;"><br /></td> </tr></tbody></table><p><span style="font-size: 12.5px;"></span><br /></p> <span id="OSC_h2_3"></span> <h2><strong>2. 复合类型</strong></h2> <p>        Oracle在PL/SQL中除了提供像前面介绍的各种类型外,还提供一种称为复合类型的类型:<br /></p> <p>      记录和表<br /></p> <p><br /></p> <span id="OSC_h3_4"></span> <h3><strong>2.1 使用%type</strong></h3> <p>        我们先看下面的例子:<br /></p> <pre class="brush:java;toolbar: true; auto-links: false;"><code>declare    c_ename constant varchar2(50):='KING';   v_job  varchar2(50); ----------------------------------------------- --备注:通过雇员姓名查找雇员的职称 ----------------------------------------------- begin   select job into v_job from emp where ename=c_ename;   dbms_output.put_line('雇员'||c_ename||'的职称为:'||v_job);   end;</code></pre> <p>   假如现在emp表的job字段长度为20 ,我们使用varchar2(50)来接收job的值可以,如果我们修改emp表结构,job字段的长度为varchar2(100),那么是不是有可能<br /></p> <p>我们的v_job  varchar2(50)  长度不够存储job列的值,会报异常:<span style="background-color: rgb(255, 0, 0);">numeric or value error: character string buffer too small        </span></p> <p>  那我们怎么来避免这种情况呢?我们看下修改后的代码:</p> <pre class="brush:java;toolbar: true; auto-links: false;"><code>declare    c_ename constant varchar2(50):='KING';   v_job  emp.job%type; ----------------------------------------------- --备注:通过雇员姓名查找雇员的职称 ----------------------------------------------- begin   select job into v_job from emp where ename=c_ename;   dbms_output.put_line('雇员'||c_ename||'的职称为:'||v_job);   end;</code></pre> <p> <br /></p> <p><span style="color: rgb(79, 129, 189);"><strong>  定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据相同,这时可以使用%type</strong></span></p> <p><span style="color: rgb(79, 129, 189);"><strong>使用%type特性的优点在于:</strong></span></p> <ul><li><p><span style="color: rgb(79, 129, 189);"><strong>所引用的数据库列的数据类型可以不必知道</strong></span></p></li> <li><p><span style="color: rgb(79, 129, 189);"><strong>所引用的数据库列的数据类型可以实时改变</strong></span><br /></p></li> </ul><p><br /></p> <p>实例:</p> <pre class="brush:sql;toolbar: true; auto-links: false;"><code>declare    c_ename constant varchar2(50):='KING';   v_job  emp.job%type;   v_deptno emp.deptno%type; ----------------------------------------------- --备注:通过雇员姓名查找雇员的职称,与部门编号 ----------------------------------------------- begin   select job,deptno into v_job,v_deptno from emp where ename=c_ename;   dbms_output.put_line('雇员'||c_ename||'的职称为:'||v_job||',部分编号为:'||v_deptno);   end;</code></pre> <p>  上面查询出两个字段的值,我们需要定义两个变量来接收它,如果是3个,5个,10个或者更多怎么办,那么我们是不是需要定义很多的变量来接收它呢,下面我们来看如何解决这个问题!</p> <p><br /></p> <span id="OSC_h3_5"></span> <h3><strong>2.2 记录类型(record)</strong></h3> <p>        record 可以看成为多个单独变量的集合,可以方便我们的查询,INSERT,UPDATE</p> <p>        若创建records,需要先定义一个record类型,再用该类型声明遍。也可以创建或查找一个表,视图,或PL/SQL游标,总之是你想要的值,使用%ROWTYPE属性来创建匹配的record。<br /></p> <p>        你可以在任何PL/SQL块,子程序或包的声明部分定义record类型。当你定义record类型时,不能在域上指定一个NOT NULL的约束,或给出它们的默认值。<br /></p> <p>        实例:</p> <pre class="brush:sql;toolbar: true; auto-links: false;"><code>declare    type emp_record is record(        job emp.job%type,--职称        deptno emp.deptno%type --部门编号, 多个用, 隔开       ); -- 定义record类型   v_emp_record  emp_record; --定义一个record类型的变量 begin                 select job,deptno into v_emp_record from emp where empno=7788;   dbms_output.put_line('雇员职称:'||v_emp_record.job||'雇员部门编号:'||v_emp_record.deptno);  end;</code></pre> <p><br /></p> <span id="OSC_h4_6"></span> <h4><strong>2.2.1 record 定义</strong></h4> <p>    record定义必须在PL/SQL块中,格式为: type record_name is record( cl1 ,cl2 ,cl2 ...);</p> <span id="OSC_h4_7"></span> <h4><strong>2.2.2 record 使用</strong></h4> <p><strong>   </strong> 使用记录类型的变量名.字段名 (可以这样理解)<strong><br /></strong></p> <pre class="brush:sql;toolbar: true; auto-links: false;"><code>dbms_output.put_line('雇员职称:'||v_emp_record.job||'雇员部门编号:'||v_emp_record.deptno);</code></pre> <span id="OSC_h4_8"></span> <h4><strong>2.2.3 record的常用场景</strong></h4> <pre class="brush:sql;toolbar: true; auto-links: false;"><code>declare    v_emp_record  emp%rowtype; --table_name%rowtype 本身就是一个记录类型,所有可以直接申明这个类型的变量就ok了 begin   select * into v_emp_record from emp where empno=7788;   dbms_output.put_line('雇员职称:'||v_emp_record.job||'雇员部门编号:'||v_emp_record.deptno);  end;</code></pre> <p>     <span style="color: rgb(79, 129, 189);"><strong>table_name%rowtype 本身就是一个记录类型,所有可以直接申明这个类型的变量就ok了</strong></span></p> <p><br /></p> <span id="OSC_h3_9"></span> <h3><strong>2.3 %ROWTYPE</strong></h3> <p><strong> </strong>  上面已经说了    table_name%ROWTYPE 本身就是一个记录类型,这个记录类型包含了table_name这张表中的所有的字段。<strong><br /></strong></p> <p>    并且不需要定义记录类型了,可以直接定义记录类型的变量,也可以说是记录类型的一种简化吧!</p> <pre class="brush:sql;toolbar: true; auto-links: false;"><code>declare    v_dept_record  dept%rowtype; --定义一个record类型的变量 begin   select * into v_dept_record from dept where deptno=10;   dbms_output.put_line('部门名称:'||v_dept_record.dname||'部门编号:'||v_dept_record.deptno);  end;</code></pre> <p>  </p> <p>下面将对游标单独讲解,未完待续 .......</p> <p><span style=";font-size:14px;font-family:'宋体'"><br /></span></p> <p><span style=";font-size:14px;font-family:'宋体'"><br /></span></p> <table style="width: 407.3pt; padding: 0pt 5.4pt;"><tbody><tr><td style="width: 64.8pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0); word-break: break-all;"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size:9.0000pt; font-family:'宋体'; "> </span></p></td> <td style="width: 75.6pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size:9.0000pt; font-family:'宋体'; "> </span></p></td> <td style="width: 117pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size:9.0000pt; font-family:'宋体'; "> </span></p></td> <td style="width: 78pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size:9.0000pt; font-family:'宋体'; "> </span></p></td> <td style="width: 71.9pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size:9.0000pt; font-family:'宋体'; "></span></p></td> </tr></tbody></table><div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/1775885/blog/309593</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/oracle" hreflang="zh-hans">Oracle</a></div> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/plsql" hreflang="zh-hans">plsql</a></div> <div class="field--item"><a href="/tag/datatype" hreflang="zh-hans">datatype</a></div> <div class="field--item"><a href="/tag/record" hreflang="zh-hans">record</a></div> </div> </div> Wed, 04 Dec 2019 21:21:04 +0000 别等时光非礼了梦想. 1668348 at https://www.e-learn.cn Oracle11gR2 数据库客户端PL/SQL中文乱码的问题 https://www.e-learn.cn/topic/1586870 <span>Oracle11gR2 数据库客户端PL/SQL中文乱码的问题</span> <span><span lang="" about="/user/169" typeof="schema:Person" property="schema:name" datatype="">亡梦爱人</span></span> <span>2019-12-04 15:22:03</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p>在进行oracle数据库的数据操作时,发现中文出现了乱码。这真是件麻烦事情。其实解决乱码的问题很简单,需要我们的PL/SQL Oracle客户端的字符集编码和Oracle数据库的字符集编码保持一致。</p> <p>1、<strong>查看oracle数据库的字符集编码:</strong></p> <pre><code class="language-sql">select * from nls_database_parameters where parameter in ('NLS_LANGUAGE', 'NLS_TERRITORY','NLS_CHARACTERSET');</code></pre> <p><img alt="" height="92" width="439" class="b-lazy" data-src="http://static.oschina.net/uploads/space/2016/0907/225444_tVg3_2625464.jpg" data-original="http://static.oschina.net/uploads/space/2016/0907/225444_tVg3_2625464.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>那么就需要我们修改ALS_LANG=AMERICAN_AMERICA_AL32UTF8。</p> <p>2、<strong>修改Oracle客户端的ALS_LANG的设置:</strong></p> <p>变量名:NLS_LANG,变量值:ALS_LANG=AMERICAN_AMERICA_AL32UTF8。</p> <p>3、<strong>我的电脑--&gt; 属性---&gt; 高级系统设置 --&gt; 环境变量</strong></p> <p><strong><img alt="" height="438" width="408" class="b-lazy" data-src="http://static.oschina.net/uploads/space/2016/0907/230029_p5Gx_2625464.jpg" data-original="http://static.oschina.net/uploads/space/2016/0907/230029_p5Gx_2625464.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></strong></p> <p>4、<strong>新建:变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK , 这样在PL/SQL 中就没有乱码,也支持中文的查询。</strong></p> <p><img alt="" height="397" width="386" class="b-lazy" data-src="http://static.oschina.net/uploads/space/2016/0907/230529_chDp_2625464.jpg" data-original="http://static.oschina.net/uploads/space/2016/0907/230529_chDp_2625464.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/2625464/blog/743949</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/shujukukehuduan" hreflang="zh-hans">数据库客户端</a></div> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/zhongwenluanmadewenti" hreflang="zh-hans">中文乱码的问题</a></div> <div class="field--item"><a href="/tag/oracle11gr2" hreflang="zh-hans">oracle11gr2</a></div> </div> </div> Wed, 04 Dec 2019 07:22:03 +0000 亡梦爱人 1586870 at https://www.e-learn.cn Oracle之PL/SQL学习笔记之PL/SQL块(二) https://www.e-learn.cn/topic/1514838 <span>Oracle之PL/SQL学习笔记之PL/SQL块(二)</span> <span><span lang="" about="/user/12" typeof="schema:Person" property="schema:name" datatype="">倖福魔咒の</span></span> <span>2019-12-04 05:06:27</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h1_1"></span> <h1>Oracle之PL/SQL学习笔记之PL/SQL块(二)</h1> <span id="OSC_h2_2"></span> <h2>1. PL/SQL块<br /></h2> <p>PL/SQL 程序由三部分组成,即声明部分,执行部分,例外部分(异常部分)</p> <p>PL/SQL 块的结构如下:</p> <p><br /></p> <pre class="brush:java;toolbar: true; auto-links: false;"><code>declare      /*声明部分:在此声明PL/SQL用到的变量,类型以及游标,局部的存储过程和函数*/ begin      /*执行部分:过程以及语句,即程序的主要部分*/      exception     /*执行异常部分:错误处理*/      end;</code></pre> <p></p> <p><span style="background-color: rgb(79, 129, 189);"><strong><span style="display: none; line-height: 0px;">‍</span></strong></span><span style="display: none; line-height: 0px;">‍</span><span style="color: rgb(79, 129, 189);"><strong>  其中,执行部分是必须的,其余部分是可选的。</strong></span><span style="display: none; line-height: 0px;">‍</span><span style="background-color: rgb(79, 129, 189);"><strong><span style="display: none; line-height: 0px;">‍</span></strong></span></p> <p><span style="color: rgb(79, 129, 189);"><strong>  最简单的块为:</strong></span></p> <pre class="brush:java;toolbar: true; auto-links: false;"><code>begin     null;--执行部分最少要添加null;表示空语句,什么都不执行,但是没有null就报错    end;</code></pre> <p></p> <p><span style="color: rgb(79, 129, 189);"></span><br /></p> <p>     <em><strong>  </strong></em><strong> PL/SQL块可以分为三类:</strong><br /></p> <p><strong>        a.</strong> 无名块:动态结构,只能执行一次<strong><br /></strong></p> <p>        <strong>b.</strong> 子程序: 存储在数据库中的存储过程,函数以及包等。当在数据库上建好后可以在其他程序中调用它们<br /></p> <p>       <strong> c.</strong> 触发器: 当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。</p> <p><br /></p> <span id="OSC_h2_3"></span> <h2>2.  标识符</h2> <p>    PL/SQL 程序设计中的标识符定义与SQL的标识符定义的要求相同。要求和限制有:<br /></p> <ul><li><p>标识符名不能超过30个字符</p></li> <li><p>第一个字符必须为字母</p></li> <li><p>不分大小写</p></li> <li><p>不能用'-'(减号)</p></li> <li><p>不能是SQL保留字</p><p><span style="color: rgb(79, 129, 189);"><strong>提示: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。</strong></span></p><p><span style="color: rgb(79, 129, 189);"></span></p><p>   <br /></p></li> </ul><pre class="brush:java;toolbar: true; auto-links: false;"><code>declare      ename emp.ename%type:='KING';    begin     delete from emp where ename=ename;      end;</code></pre> <p></p> <p><br /></p> <p><span style="color: rgb(79, 129, 189);"><strong>以上案例,不是删除ename='KING'的员工信息,而是删除了整表的信息相当于 delete from emp</strong></span></p> <p><br /></p> <span id="OSC_h2_4"></span> <h2>3. PL/SQL命名规范</h2> <p>        变量命名在PL/SQL中有特别的讲究,建议在系统的设计阶段就要求所有变成人员共同遵守一定的要求,使得整个系统的文档在规范上达到要求。</p> <p><br /></p> <table style="width: 426.1pt; padding: 0pt 5.4pt;"><tbody><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-width: 0.5pt; border-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; text-align:center; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">标识符</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-width: 0.5pt; border-top-color: rgb(0, 0, 0); border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; text-align:center; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">命名规则</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-width: 0.5pt; border-top-color: rgb(0, 0, 0); border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; text-align:center; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">例子</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">程序变量</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">V_name</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">V_name</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">程序常量</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">C_Name</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">C_company_name</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">游标变量</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Name_cursor</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Emp_cursor</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">异常标识</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">E_name</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">E_too_many</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">表类型</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Name_table_type</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Emp_record_type</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size:10.5000pt; font-family:'宋体'; ">表</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Name_table</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Emp</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记录类型</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Name_record</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">Emp_record</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">SQL*Plus </span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">替代变量</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">P_name</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">P_sal</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr><tr><td style="width: 142pt; padding: 0pt 5.4pt; border-left-width: 0.5pt; border-left-color: rgb(0, 0, 0); border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">绑定变量</span><span style="font-size:10.5000pt; font-family:'宋体'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0);"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">G_name</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> <td style="width: 142.05pt; padding: 0pt 5.4pt; border-left-style: none; border-right-width: 0.5pt; border-right-color: rgb(0, 0, 0); border-top-style: none; border-bottom-width: 0.5pt; border-bottom-color: rgb(0, 0, 0); word-break: break-all;"><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Arial'; ">G_year_sal</span><span style="font-size:10.5000pt; font-family:'Arial'; "></span></p></td> </tr></tbody></table><p><br /></p> <span id="OSC_h2_5"></span> <h2><strong><span style="color: rgb(31, 73, 125);"><span style="display: none; line-height: 0px;">‍</span></span></strong><span style="display: none; line-height: 0px;">‍</span><strong>4. 表达式</strong><span style="display: none; line-height: 0px;">‍</span><strong><span style="color: rgb(31, 73, 125);"><span style="display: none; line-height: 0px;">‍</span></span></strong></h2> <p><strong>  数据库中经常使用表达式来计算结果,尤其在变量和常量的使用过程中。<br /></strong></p> <ul><li><p><strong>数值表达式</strong></p></li> <li><p><strong>关系表达<strong>式</strong></strong></p></li> <li><p><strong>逻辑表达式</strong></p></li> </ul><span id="OSC_h3_6"></span> <h3><strong>4.1 数值表达式(结果还是数值)</strong></h3> <p><strong>    数值表达式就是由数值类型的常量,变量以及函数,由算术运算符连接而成。在PL/SQL中可以使用的算术运算符有:</strong></p> <ol><li><p><strong>  加号+</strong></p></li> <li><p><strong>减号 -</strong></p></li> <li><p><b>乘号 * </b></p></li> <li><p><b>除号 /</b></p></li> <li><p><b>乘方 **</b></p></li> </ol><pre class="brush:sql;toolbar: true; auto-links: false;"><code>begin    dbms_output.put_line(3**3); -- 3*3*3=27 end;</code></pre> <span id="OSC_h3_7"></span> <h3><strong>4.2 关系表达式和逻辑表达式(结果是boolean)</strong></h3> <p><strong> 由关系运算符连接起来的字符或数值称为关系表达式。其中关系运算符主要有以下几种:<br /></strong></p> <ul><li><p><strong>等于号 =</strong></p></li> <li><p><strong>小于号 &lt;</strong></p></li> <li><p><strong>大于号 &gt;</strong></p></li> <li><p><strong>小于等于&lt;=</strong></p></li> <li><p><b>大于等于&gt;=</b></p></li> <li><p><b>不等于!=和&lt;&gt;</b></p></li> </ul><p><em><span style="color: rgb(255, 0, 0);"><b>关系表达式很多用在PL/SQL的条件语句中,它们最后的结果是一个布尔类型的值</b></span></em></p> <p><strong><span style="color: rgb(0, 0, 0);">逻辑表达式</span></strong></p> <ul><li><p><strong><span style="color: rgb(0, 0, 0);">逻辑非 NOT </span></strong></p></li> <li><p><strong><span style="color: rgb(0, 0, 0);">逻辑或OR</span></strong></p></li> <li><p><strong><span style="color: rgb(0, 0, 0);">逻辑与AND</span></strong></p></li> </ul><pre class="brush:sql;toolbar: true; auto-links: false;"><code>begin    if 1&lt;&gt;2 AND 1&lt;2 then      dbms_output.put_line('1!=2');   end if;   dbms_output.put_line(3**3); end;</code></pre> <p><strong><span style="color: rgb(0, 0, 0);"></span></strong><br /></p> <p><strong><span style="color: rgb(0, 0, 0);"></span></strong></p> <p></p> <p><strong><br /></strong></p> <p></p> <p></p> <p><span style="color: rgb(31, 73, 125);">未完待续.....</span></p> <p><br /></p> <p><br /></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/1775885/blog/309458</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/oracle" hreflang="zh-hans">Oracle</a></div> <div class="field--item"><a href="/tag/plsql" hreflang="zh-hans">plsql</a></div> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> </div> </div> Tue, 03 Dec 2019 21:06:27 +0000 倖福魔咒の 1514838 at https://www.e-learn.cn 不安装oracle客户端,用plsql连接oracle https://www.e-learn.cn/topic/1413090 <span>不安装oracle客户端,用plsql连接oracle</span> <span><span lang="" about="/user/163" typeof="schema:Person" property="schema:name" datatype="">荒凉一梦</span></span> <span>2019-12-03 11:21:54</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h1_1"></span> <h1><a href="http://www.cnblogs.com/zhwl/p/3727565.html" rel="nofollow">不安装oracle客户端,用plsql连接oracle</a></h1> <p>常用的Oracle开发的工具有SQL Developer和PL/SQL Developer,个人感觉前者虽然跨平台性优于后者,但比较大(大于300M)占用资源,而且用户体验也一般,而后者相对就小很多(小于30M),用起来也比较顺手。</p> <p> </p> <p>用PL/SQL连接oracle数据库,不管是本地的还是远程的,一般都需要安装oracle客户端(500M左右)比较大,而且在各个系统上安装也有些讲究,需要修改相应配置文件,有点麻烦。</p> <p> </p> <p>如何达到不安装oracle客户端,又能使用PL/SQL工具?本人做了如下测试并达到目的。</p> <p> </p> <p>测试环境:win7系统,未安装过oracle包括客户端,本机虚拟机linux中装有oracle,并有一个可用的orcl实例;</p> <p> </p> <p>1. oracle官网提供了instantclient,下载instantclient-basic包,将包解压存放到本地,本测试为</p> <p>    D:\STUDY\instantclient_10_2;</p> <p> </p> <p>2. 在这个目录下新建sqlnet.ora和tnsnames.ora两个文件</p> <p> </p> <p><strong>sqlnet.ora文件内容</strong></p> <p>---------------------</p> <p>SQLNET.AUTHENTICATION_SERVICES= (NTS)   </p> <p> </p> <p>NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)</p> <p> </p> <p><strong>tnsnames.ora文件内容</strong></p> <p>-------------------------</p> <p><strong><em>orcl</em></strong> =   </p> <p>(DESCRIPTION =      </p> <p>  (ADDRESS_LIST =         </p> <p>    (ADDRESS = (PROTOCOL = TCP)(HOST = <strong><em>192.168.146.143</em></strong> )(PORT = 1521))      </p> <p>  )       </p> <p>  (CONNECT_DATA =        </p> <p>    (SERVICE_NAME = <strong><em>orcl</em> </strong>)      </p> <p>  )</p> <p>)</p> <p>注:斜体部分需要按需配置,如果端口是自定义的也需要相应变更。</p> <p> </p> <p>3. 配置环境变量</p> <p> </p> <p>变量名                       变量值</p> <p>TNS_ADMIN            D:\STUDY\instantclient_10_2</p> <p>  </p> <p>注:这里变量值即为instantclient在本地的主目录;如果不配置该变量,</p> <p>       连接时会报错ORA-12154: TNS:could not resolve the connect identifier specified。</p> <p> </p> <p>4. 安装PL/SQL Developer,并配置oracle的连接参数:</p> <p>    打开PL/SQL,Tools--&gt;Preferences,配置Connection的Oracle Home和OCI library,如下图所示</p> <p>   </p> <p> </p> <p> 5. 重新启动PL/SQL,登录测试,OK!</p> <p> </p> <p>如果出现乱码问题,请点击:<a href="http://gang-chen.iteye.com/blog/2005546" rel="nofollow">http://gang-chen.iteye.com/blog/2005546</a></p> <p> </p> <p>另附下载地址:</p> <p>PL/SQL Developer:<a href="http://www.allroundautomations.com/bodyplsqldevreg.html" rel="nofollow">http://www.allroundautomations.com/bodyplsqldevreg.html</a></p> <p>instantclient-basic-win32:<a href="http://pan.baidu.com/share/link?shareid=514153&amp;uk=3255414737" rel="nofollow">http://pan.baidu.com/share/link?shareid=514153&amp;uk=3255414737</a></p> <p>也可以去oracle官网下载instantclient其他版本,只是不太稳定,有时会下载失败。 </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/2377060/blog/774671</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> </div> </div> Tue, 03 Dec 2019 03:21:54 +0000 荒凉一梦 1413090 at https://www.e-learn.cn PL/sql导入sql文件中文乱码解决办法 https://www.e-learn.cn/topic/1413032 <span>PL/sql导入sql文件中文乱码解决办法</span> <span><span lang="" about="/user/99" typeof="schema:Person" property="schema:name" datatype="">牧云@^-^@</span></span> <span>2019-12-03 11:21:36</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p>从别处接过来的pl/SQL导出文件XX.sql文件,用pl/sql工具中的<em>import</em>功能导入到本地库后,发现表的comment注释中文乱码,可通过以下办法解决,特记录如下:</p> <p>1)进入pl/sql安装目录:我的目录是"E:\Program Files (x86)\PLSQL Developer\"</p> <p>2)在目录内新建一个startplsql.bat文件,文件内容为</p> <p>set ORACLE_HOME=E:\app\Again\product\11.2.0\dbhome_1</p> <p>set PATH=E:\app\Again\product\11.2.0\dbhome_1</p> <p>set TNS_ADMINE=E:\app\Again\product\11.2.0\dbhome_1\network\admin</p> <p>set NLS_LANG=AMERICAN_AMERICA.AL32UTF8</p> <p>start plsqldev.exe </p> <p><br /></p> <p>3<span style="line-height: 22.5px;">)</span>打开Uedit文本编辑软件,新建一个文本,选择【视图】-【查看代码页】,选择UTF-8并保存,XX.sql文件中内容复制到该页,并另存为ZMXX.sql文件,另存弹出框,下拉选择格式为UTF-8</p> <p>4)执行startplsql.bat文件,自动启动pl/sql,在执行import导入工具导入ZMXX.sql即可。</p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/1032948/blog/224009</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/zhongwen" hreflang="zh-hans">中文</a></div> <div class="field--item"><a href="/tag/luanma" hreflang="zh-hans">乱码</a></div> <div class="field--item"><a href="/tag/oralce" hreflang="zh-hans">oralce</a></div> </div> </div> Tue, 03 Dec 2019 03:21:36 +0000 牧云@^-^@ 1413032 at https://www.e-learn.cn 《oracle pl/sql程序设计》学习笔记一 https://www.e-learn.cn/topic/1288442 <span>《oracle pl/sql程序设计》学习笔记一</span> <span><span lang="" about="/user/54" typeof="schema:Person" property="schema:name" datatype="">↘锁芯ラ</span></span> <span>2019-12-03 02:08:03</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p> 本篇主要是记录一些容易混淆或者以前理解不够清楚的知识点,只选择常用知识点。 </p> <p> 一、case语句和case表达式<br /> 1、case语句和case表达式都有两种模式:简单型和搜索型。<br />     简单型:case exp when res1 then ... res2 then ... [else ...]  (end case |end);<br />     搜索型 :case when exp1 then ... exp2 then ... [else ...]  (end case |end).<br /> 2、区别<br />     case语句没有匹配项会报错;case表达式不会,返回null。<br />     case语句以end case结尾;case表达式以end结尾。 </p> <p> 二、for循环只有数值型下标和游标两种方式循环,数值型的上下标只在第一次循环前求值(包括表达式计算和四舍五入)。 </p> <p> 三、11g以后新增了continue [label1] [when exp1]语句,用于执行下一个循环。 </p> <p> 四、异常处理<br /> 1、sqlcode<br />     获取当前异常号,正常为0.<br /> 2、sqlerrm<br />     最原始的异常信息获取方式,最大512字节。不带参数时返回当前sqlcode对应的信息。带参数时返回指定sqlcode的信息。<br /> 3、dbms_utility.format_error_stack<br />     比sqlerrm可容纳字节多,达1899字节,只能返回当前sqlcode对应的信息。<br /> 4、dbms_utility.format_error_backtrace<br />     10G以后新增,返回当前异常栈,从最开始异常的过程名和代码行号,一直回溯到当前调用块。可以快速定位异常位置。 </p> <p> 为了获取最全的异常信息,建议使用dbms_utility.format_error_stack||dbms_utility.format_error_backtrace的方式输出,如果是调用的过程中有异常处理,那么应该把需要继续抛出的异常以下列两种方式抛出:<br /> raise_application_error(-20008,dbms_utility.format_error_stack||dbms_utility.format_error_backtrace);--重建异常栈<br /> raise_application_error(-20008,'当前添加的信息',true) ;--只是添加到当前异常栈,不会重建。<br /> 其他的方式都会使异常栈重建,而丢失之前的异常信息,所以不要用raise [...]抛出异常,除非你已经处理了之前的异常。 </p> <p> 五、字符型<br /> 1、varchar2,推荐所有的字符型都使用此类型,pl/sql中最长32767字节,db中8i以后4000字节。<br /> 2、nvarchar2,和varchar2类似,只是使用国家字符集,且定义长度时默认以字符为单位,pl/sql中最长32767字节,db中8i以后4000字节。<br /> 3、char,不推荐使用,因为填充空格会带来很多意想不到的问题,且浪费空间,pl/sql中最长32767字节,db中8i以后2000字节。<br /> 4、nchar,和char类似,只是使用国家字符集,且定义长度时默认以字符为单位,pl/sql中最长32767字节,db中8i以后2000字节。<br /> 5、其他的字符类型都是为了兼容ansi sql定义的子类型。<br /> 6、char类型和“非varchar2类型”(如字面值、char)比较,先用空格填充到一样的长度再比较,如果和varchar2类型比较,不填充直接比较。<br /> 7、字面值,oracle默认当做char类型,plsql最多32760字节,db最多4000字节。 </p> <p> 六、数值型<br /> 1、number,最基础的类型,金融类精确数据必须选择,number(p,s),p (1~38), s (-84~127).<br /> 2、pls_integer,binary_integer,simple_integer。pl/sql专用,二进制计算模式,10g以后不推荐使用binary_integer,用pls_integer代替,simple_integer是11g新增类型,简化pls_integer,不能为null,不检查溢出,不支持特殊谓词,速度非常快。因为pl/sql中基本不需要上述支持。<br /> 3、binary_float,binary_double。二进制计算模式,单精度浮点数和双精度浮点数,字面值后面加f或d。<br /> 4、simple_float,simple_double。pl/sql专用,二进制计算模式,11g以后新增类型,也是简化binary系列类型,高效率。 </p> <p> 七、日期类型<br /> 1、date,精确到秒<br /> 2、timestamp,精确到9位小数秒,默认为6位小数秒。<br /> 3、timestamp with time zone,固定时区的timestamp<br /> 4、timestamp with local time zone,在客户端和服务器之间转换时区的timestamp.<br /> 5、interval year[0~4] to month,默认year是2<br /> 6、interval day[0~9] to second[0~9],默认day是2,second是6<br /> 7、yminterval_unconstrained,dsinterval_unconstrained使用在过程的参数和返回值中,不再使用默认精度,不损失精度。 </p> <p> 八、其他类型<br /> 1、raw,不做字符集转换,pl/sql最大32767,db最大2000字节。<br /> 2、long ,long raw,pl/sql最大32760,db最大2GB-1字节。不推荐使用,以大对象代替。<br /> 3、urowid,rowid,使用urowid代替rowid,用来储存数据库的各种rowid。<br /> 4、记录类型,pl/sql专用,基于游标、表类型或者自定义的记录类型,type ... is record (...,...,).<br /> 5、关联数组,pl/sql专用,type .. is table of ... index by pls_integer / varchar2(..).类似java中的map<br /> 6、嵌套表,type ... is table of ...  ,可以作为db的列。列在表外。类似数据库表,索引值类似rowid<br /> 7、varray , type ... is varray of ... ,可以作为db的列。列在表内。类似java中的数组,保留顺序,固定长度。<br /> 8、集合类型的使用:嵌套表和varray需要初始化和extend扩展才能使用,但是初始化可以用(..,..,..)值列表的方式一次性赋值多个值;还可以和数据库中的嵌套表或varray进行转换而隐式初始化;select * bulk collect into ...也可以隐式初始化。关联数组不用初始化和extend扩展。varray不能delete某一行,只能trim掉最后一行或者全部delete,保证它是一个紧凑的集合。<br /> 9、bfile,blob,clob,nclob,大对象,bfile只读,文件在数据库外,lob可读写,文件在数据库内,数据库列中只存定位器。11g后,lob类型引入SecureFiles代替原来的baseFiles,改进lob的效率,需要初始化参数db_securefile=permitted,并且lob数据的表空间是ASSM。 <br /> 10、bolean,pl/sql专用。 </p> <p> 九、子类型定义<br /> 子类型定义可以直接在基础类型上做特殊限制,也可以锚定类型。<br /> 锚定的子类型不会继承父类型的not null和缺省值。<br /> 锚定的类型也不会继承被锚定的数据库列上的not null和缺省值。 </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/105376/blog/66019</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/shujuleixing" hreflang="zh-hans">数据类型</a></div> <div class="field--item"><a href="/tag/yichang" hreflang="zh-hans">异常</a></div> <div class="field--item"><a href="/tag/case" hreflang="zh-hans">case</a></div> </div> </div> Mon, 02 Dec 2019 18:08:03 +0000 ↘锁芯ラ 1288442 at https://www.e-learn.cn PL/SQL7中的SQL美化器设置 https://www.e-learn.cn/topic/1139532 <span>PL/SQL7中的SQL美化器设置</span> <span><span lang="" about="/user/55" typeof="schema:Person" property="schema:name" datatype="">风格不统一</span></span> <span>2019-12-02 19:25:21</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h3_1"></span> <h3>一、我的环境</h3> <p>1、操作系统版本:Windows 7 旗舰版,Service Pack 1</p> <p>2、PL/SQL版本:7.0.1.1066 20000.0915</p> <span id="OSC_h3_2"></span> <h3>二、设置方法</h3> <p>1、在“编辑”菜单中找到“PL/SQL美化器选项”</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/082722_1kYC_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/082722_1kYC_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /><br /></p> <p>2、如果已经有规则文件,则点击右侧的“浏览”按钮,如果希望自己设置美化器规则,则点击“编辑”按钮</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/082847_XgtB_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/082847_XgtB_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>3、在“PL/SQL美化器规则”界面,可以编辑美化器规则。上面是可视化编辑界面,可以编辑对一般SQL语句、控制结构、DML、参数声明、记录类型声明的美化规则。需要注意的是,“语法大小写”中“关键词”的配置有问题,选择“大写”的时候预览界面和实际作用都显示的是小写的关键词,选择“小写”时效果亦反之。</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/083622_TMhF_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/083622_TMhF_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /><br /></p> <p>4、配置完毕后,点击“另存为”按钮,将配置结果保存到扩展名为br的文件中</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/083801_x6gr_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/083801_x6gr_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /><br /></p> <p>5、此时点击“浏览”按钮将刚才另存为的规则文件(扩展名为*.br)加载进来,设定应用范围(包括“Default 当前用户”和“System Default”全局应用)两种,最后在下面设定自动美化规则,这里我选择不进行自动美化。</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/084020_QUom_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/084020_QUom_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>6、新建一个SQL窗口,放入SQL语句。点击“编辑”菜单下的“PL/SQL美化器”,就可以对SQL窗口中的SQL语句进行美化了。</p> <p>注:只要是SQL语句都能用PL/SQL帮助美化,并不是必须为Oracle数据库的查询语句才能被美化,例如下面我用作例子的那个SQL语句是一个用于查询MySQL数据库的SQL。</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/084407_chJq_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/084407_chJq_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>7、美化后的SQL语句</p> <p><img class="b-lazy" data-src="http://static.oschina.net/uploads/space/2015/0824/084517_JVT2_1425762.png" data-original="http://static.oschina.net/uploads/space/2015/0824/084517_JVT2_1425762.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <span id="OSC_h3_3"></span> <h3>三、附:我的美化器规则文件(mybr.br)</h3> <pre class="brush:xml;toolbar: true; auto-links: false;"><code>Version=1 RightMargin=80 Indent=2 UseTabCharacter=FALSE TabCharacterSize=2 AlignDeclarationGroups=TRUE AlignAssignmentGroups=TRUE KeywordCase=1 IdentifierCase=0 UseSpecialCase=TRUE ItemList.Format=1 ItemList.Align=TRUE ItemList.CommaAfter=TRUE ItemList.AtLeftMargin=FALSE EmptyLines=0 ThenOnNewLine=TRUE LoopOnNewLine=TRUE DML.LeftAlignKeywords=TRUE DML.LeftAlignItems=TRUE DML.OnOneLineIfPossible=FALSE DML.WhereSplitAndOr=FALSE DML.WhereAndOrAfterExpression=FALSE DML.WhereAndOrUnderWhere=FALSE DML.InsertItemList.Format=1 DML.InsertItemList.Align=FALSE DML.InsertItemList.CommaAfter=TRUE DML.InsertItemList.AtLeftMargin=FALSE DML.SelectItemList.Format=1 DML.SelectItemList.Align=TRUE DML.SelectItemList.CommaAfter=TRUE DML.SelectItemList.AtLeftMargin=FALSE DML.UpdateItemList.Format=1 DML.UpdateItemList.Align=TRUE DML.UpdateItemList.CommaAfter=TRUE DML.UpdateItemList.AtLeftMargin=FALSE ParameterDeclarationList.Format=1 ParameterDeclarationList.Align=TRUE ParameterDeclarationList.CommaAfter=TRUE ParameterDeclarationList.AtLeftMargin=FALSE RecordFieldList.Format=1 RecordFieldList.Align=TRUE RecordFieldList.CommaAfter=TRUE RecordFieldList.AtLeftMargin=FALSE SplitAndOr=TRUE AndOrAfterExpression=TRUE [SpecialCase]</code></pre> <p><strong>END</strong><br /></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/1425762/blog/496146</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/meihuaqi" hreflang="zh-hans">美化器</a></div> <div class="field--item"><a href="/tag/meihuaqiguize" hreflang="zh-hans">美化器规则</a></div> <div class="field--item"><a href="/tag/brwenjian" hreflang="zh-hans">br文件</a></div> </div> </div> Mon, 02 Dec 2019 11:25:21 +0000 风格不统一 1139532 at https://www.e-learn.cn 不用安装ORACLE客户端(不执行*.exe)也能使用PL/SQL Developer的说明 https://www.e-learn.cn/topic/958461 <span>不用安装ORACLE客户端(不执行*.exe)也能使用PL/SQL Developer的说明</span> <span><span lang="" about="/user/181" typeof="schema:Person" property="schema:name" datatype="">陌路散爱</span></span> <span>2019-12-01 15:20:34</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h1_1"></span> <h1>1.<span style="font-family:宋体">有什么好处</span></h1> <p><span style="font-family:宋体">网上</span>ORACLE<span style="font-family:宋体">的客户端有大致有两种:一种</span>*.exe<span style="font-family:宋体">安装文件,一种到</span>ORACLE<span style="font-family:宋体">官网下载客户端文件,没有安装可执行文件,绿色的直接解压。但要让</span>PL/SQL Developer<span style="font-family:宋体">运行运来还得做相关配置。本文说就是第二种情况。这种方法有些麻烦,但为什么要用,主要的好处是:</span></p> <p><span style="font-family:宋体">重装系统后,不再必须安装</span>100<span style="font-family:宋体">多兆</span>Oracle<span style="font-family:宋体">客户端工具,这对于开发人员,他们使用</span>Oracle<span style="font-family:宋体">数据库需要的仅是用</span>PL/SQL Developer <span style="font-family:宋体">或</span>TODA<span style="font-family:宋体">之类工具连接</span>Oracle<span style="font-family:宋体">功能而已,就可节约时间和磁盘空间,省去重装系统后重装工具的麻烦,可谓一劳永逸。</span></p> <span id="OSC_h1_2"></span> <h1>2.<span style="font-family:宋体">具体过程</span></h1> <span id="OSC_h2_3"></span> <h2><strong><span style="font-family:'Cambria',serif">2.1</span></strong><strong><span style="font-family:宋体">下载</span></strong><strong><span style="font-family:'Cambria',serif">Oracle Client Package</span></strong></h2> <p><span style="font-size:16px;font-family:宋体;color:black">先到</span><span style="font-size:16px;font-family:宋体;color:black">ORACLE</span><span style="font-size:16px;font-family:宋体;color:black">官网上下载客户端</span><span style="font-size:16px;font-family:宋体;color:black">,</span><span style="font-family:宋体;color:black">名为</span><span style="color:black">“Instant Client Package”</span><span style="font-family:宋体;color:black">的软件:</span><a href="http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html" rel="nofollow"><span style="color:#006699;text-underline:none">http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html</span></a><span style="color:black"><br /></span><span style="font-family:宋体;color:black">下载程序包:</span><span style="color:black"><br /> instantclient-basic-win32-11.1.0.x.0.zip (</span><span style="font-family:宋体;color:black">目前有版本:</span><span style="color:black">11.1.0.6.0 </span><span style="font-family:宋体;color:black">和</span><span style="color:black"> 11.1.0.7.0)<br /></span><span style="font-family:宋体;color:black">或</span><span style="color:black">instantclient-basic-win32-10.2.0.x.zip    (</span><span style="font-family:宋体;color:black">目前有版本:</span><span style="color:black"> 10.2.0.3 </span><span style="font-family:宋体;color:black">和</span><span style="color:black"> 10.2.0.4)<br /></span><span style="font-family:宋体;color:black">或</span><span style="color:black">instantclient-basic-win32-10.1.0.5-20060419.zip</span></p> <span id="OSC_h2_4"></span> <h2>2.2<span style="font-family:宋体">安装</span>ORACLE<span style="font-family:宋体">客户端</span></h2> <p><span style="font-family:宋体">客户端的安装很简单,即将下载的</span>Oracle Client Package<span style="font-family: 宋体">程序包压缩文件,解压到指定的文件夹即可,本文以</span> d:\oracle_client\instantclient_10_2 <span style="font-family:宋体">为例</span>)</p> <span id="OSC_h2_5"></span> <h2>2.3<span style="font-family:宋体">新建</span>sqlnet.ora<span style="font-family:宋体">和</span>tnsnames.ora<span style="font-family:宋体">文件</span></h2> <p><span style="font-family:宋体">在</span>ORACEL<span style="font-family:宋体">客户端安装文件夹下新建</span>sqlnet.ora<span style="font-family:宋体">和</span>tnsnames.ora<span style="font-family: 宋体">,并配置相关内容:</span></p> <p><strong><span style="font-family:'Calibri',sans-serif">sqlnet.ora</span></strong><strong><span style="font-family:宋体">文件内容一般为</span></strong><strong><span style="font-family: 'Calibri',sans-serif">:</span></strong></p> <p style="line-height:115%">SQLNET.AUTHENTICATION_SERVICES= (NTS)<br /> NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)</p> <p><strong><span style="font-family:'Calibri',sans-serif"> </span></strong></p> <p><strong><span style="font-family:'Calibri',sans-serif">tnsnames.ora</span></strong><strong><span style="font-family:宋体">文件内容</span></strong><strong><span style="font-family:'Calibri',sans-serif">(</span></strong><strong><span style="font-family:宋体">斜体表示需要替换的内容</span></strong><strong><span style="font-family: 'Calibri',sans-serif">):</span></strong></p> <p>orcl=<br /> (DESCRIPTION =<br />     (ADDRESS_LIST =<br />       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.103)(PORT = 1521))<br />     )<br />     (CONNECT_DATA =<br />       (SERVICE_NAME = orcl)<br />     )<br /> )</p> <p><span style="font-family:宋体">可以从安装了</span>oracle<span style="font-family:宋体">的机上拷贝一个</span>(tnsnames.ora<span style="font-family:宋体">文件在</span>%ORACLE_HOME%\network\admin<span style="font-family:宋体">下</span>)</p> <span id="OSC_h2_6"></span> <h2>2.4<span style="font-family:宋体">配置环境变量</span></h2> <p><span style="font-family:宋体">主要设置系统两个变量</span><span style="background:fuchsia;background: fuchsia">TNS_ADMIN</span><span style="font-family:宋体">和</span><span style="background:fuchsia;background:fuchsia">NLS_LANG</span></p> <p><strong><span style="font-family:'Calibri',sans-serif">TNS_ADMIN</span></strong><strong><span style="font-family:'Calibri',sans-serif"> =D:\oracle_client\instantclient_10_2</span></strong></p> <p><span style="font-family:宋体">值为</span>tnsnames.ora<span style="font-family:宋体">文件所在路径,这是为了能够找到上面说的</span>tnsnames.ora<span style="font-family:宋体">(</span><span style="font-family:宋体">本文即为</span> d:\oracle_client\instantclient_10_2<span style="font-family:宋体">,</span><span style="font-family:宋体">特别是重装后或其它操作,忘了</span>TNS_ADMIN<span style="font-family:宋体">变量,</span>PL/SQL Developer<span style="font-family:宋体">登陆就会报</span><a href="http://hi.baidu.com/ilovemy77lovem" rel="nofollow"><span style="font-family:宋体;color:windowtext;text-underline:none">无法解析指定的连接标识符</span></a>)<span style="font-family:宋体">。如果本机上安装了</span>ORACLE<span style="font-family:宋体">,并且设置了</span>ORACLE_HOME<span style="font-family:宋体">环境变量,那么会自动在</span>%ORACLE_HOME%/network/admin/<span style="font-family:宋体">位置查找</span>tnsnames.ora<span style="font-family:宋体">文件。</span><br /><span style="font-size:14px;font-family:宋体">否则出现</span><span style="font-size: 14px">:ORA-12154: TNS:could not resolve the connect identifier specified</span><span style="font-size:14px;font-family:宋体">错误</span></p> <p style=";margin-bottom:0;line-height: 37px;background:white"><strong><span style="font-family:'Calibri',sans-serif">NLS_LANG = </span></strong>SIMPLIFIED CHINESE_CHINA.ZHS16GBK</p> <p><span style="font-size:12px;font-family:'Verdana',sans-serif;color:black">ORACLE</span><span style="font-size:12px;font-family:宋体;color:black">的语言的环境变量,一般为</span>“NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK”<span style="font-family:宋体">,</span>(AMERICAN_AMERICA.US7ASCII <span style="font-family:宋体">是</span>ASCII<span style="font-family:宋体">编码类型,其它类型可自己到服务器看一下或网上查找一下</span>)</p> <p><span style="font-size:14px;font-family:宋体">如果之前安装了</span><span style="font-size:14px">Oracle </span><span style="font-size:14px;font-family:宋体">又卸载</span><span style="font-size:14px">,</span><span style="font-size:14px;font-family:宋体">会遗留</span><span style="font-size:14px">NLS_LANG=NA</span><span style="font-size:14px;font-family:宋体">的键值</span><span style="font-size:14px">.</span><span style="font-size:14px;font-family:宋体">输入</span><span style="font-size:14px">RegEdit</span><span style="font-size:14px;font-family:宋体">打开注册表</span><span style="font-size:14px">HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE.</span><span style="font-size:14px;font-family:宋体">在右面找到</span><span style="font-size:14px">NLS_LANG=NA</span><span style="font-size:14px;font-family:宋体">并删除掉</span><span style="font-size: 14px"><br /></span><span style="font-size:14px;font-family:宋体">否则会报</span><span style="font-size:14px">ORA-12705: Cannot access NLS data files or invalid </span><span style="font-size:14px;font-family:宋体">错误</span><span style="font-family:宋体">)</span></p> <span id="OSC_h2_7"></span> <h2>2.5<span style="font-family:宋体">安装</span>pl/sql<span style="font-family:宋体">软件</span>(<span style="font-family:宋体">过程略</span>)</h2> <span id="OSC_h2_8"></span> <h2>2.6<span style="font-family:宋体">配置</span>pl/sql<span style="font-family:宋体">的</span>Oracle<span style="font-family:宋体">连接参数</span>:</h2> <p><span style="font-family:宋体">选择</span>pl/sql<span style="font-family:宋体">的工具</span>/<span style="font-family:宋体">首选项</span>(tool/ preference/)<span style="font-family:宋体">里的连接</span>,<span style="font-family:宋体">在右面设置</span>Oracle<span style="font-family:宋体">主目录名</span>(<span style="font-family:宋体">即安装目录</span>)<span style="font-family:宋体">和</span>OCI<span style="font-family:宋体">库。</span></p> <p>Oracle<span style="font-family:宋体">主目录名</span>: D:\oracle_client\instantclient_10_2<br /> OCI<span style="font-family:宋体">库</span>: D:\oracle_client\instantclient_10_2\oci.dll</p> <span id="OSC_h2_9"></span> <h2>2.7<span style="font-family:宋体">登陆</span>pl/sql<span style="font-family:宋体">测试成功</span></h2> <p><span style="font-family:宋体">用</span>oracle <span style="font-family:宋体">客户端的精简版,占用资源等都很满意,但网上说是导出数据就不行了,未测试过</span></p> <p><span style="font-family:宋体">网上还有很多资料,介绍通过</span>Dos<span style="font-family:宋体">批处理文件或使用</span>Setx.exe<span style="font-family:宋体">制作写入注册表文件设置变量的方式,确实很方便,但对于初学者来说,动手去做每一步,更有利于掌握。</span></p> <p><br /></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/2305421/blog/485646</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/buyonganzhuangoracle" hreflang="zh-hans">不用安装ORACLE</a></div> <div class="field--item"><a href="/tag/buzhixingexe" hreflang="zh-hans">不执行*.exe</a></div> <div class="field--item"><a href="/tag/plsql-0" hreflang="zh-hans">PL/SQL</a></div> <div class="field--item"><a href="/tag/developer" hreflang="zh-hans">developer</a></div> </div> </div> Sun, 01 Dec 2019 07:20:34 +0000 陌路散爱 958461 at https://www.e-learn.cn