动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.在*.SQL文件里获取并使用变量.
.通过LEI技术实现NOTES与SQL2000数.
.将EXP出来的数据IMP进不同的表空.
.访问Oracle数据库时如何限制绕过.
.ORA-01591故障处理.
.vsftpd-1.1.3配制实例之二:INTE.
.Oracle数据库管理系统发布11i安全.
.突破oracle for win2K的2G内存限.
.Oracle安全全程接触(完整版)二.
.Oracle Database 10 g : 为 DBA .
.RedHatLinux下Oracle启动脚本的建.
.Oracle中如何直接运行OS命令(上).
.启动Oracle常见疑难问题分析.
.Oracle10g自动归档的设置.
.甲骨文连续收购积蓄实力欲与SAP抗.
.ORACLE PERFORMANCE SQL TUNING.
.Enterprise Library-Data Block .
.Oracle Spatial数据加密问题研究.
.简单介绍用RMAN进行Oracle自动备.
.Oracle数据分片技术.

PL/SQL在from后面使用变量,以及输入'&字符'的方法

发表日期:2008-2-9 |


在from后面使用变量 CREATE OR REPLACE FUNCTION GET_TABLE_COUNT(
I_TabNa IN VARCHAR2 ,
I_Owner IN VARCHAR2 DEFAULT NULL
)
RETURN NUMBER
IS
V_RtnVal NUMBER ;
V_CursorId INTEGER ;
V_SqlStr VARCHAR2(300) ;
BEGIN
V_CursorId := DBMS_SQL.OPEN_CURSOR ; IF LENGTHB( RTRIM( LTRIM( NVL( I_Owner , '' ) ) ) ) = 0 THEN
V_SqlStr := 'SELECT COUNT(*) FROM ' I_TabNa ;
ELSE
V_SqlStr := 'SELECT COUNT(*) FROM ' I_Owner '.' I_TabNa ;
END IF ; DBMS_SQL.PARSE( V_CursorId , V_SqlStr , DBMS_SQL.V7 ) ; DBMS_SQL.DEFINE_COLUMN( V_CursorId , 1 , 0 ) ; IF DBMS_SQL.EXECUTE( V_CursorId ) = 0 THEN
NULL ;
END IF ; IF DBMS_SQL.FETCH_ROWS( V_CursorId ) = 0 THEN
RETURN 0 ;
END IF ; DBMS_SQL.COLUMN_VALUE( V_CursorId , 1 , V_RtnVal ) ; DBMS_SQL.CLOSE_CURSOR( V_CursorId ) ; RETURN V_RtnVal ;
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR( V_CursorId ) ;
-- DBMS_OUTPUT.PUT_LINE( V_SqlStr SQLERRM ) ;
RETURN 0 ;
END GET_TABLE_COUNT;
试验结果:
SQL> select GET_TABLE_COUNT( 'tab' ) from dual ; GET_TABLE_COUNT('TAB')
----------------------
22 SQL> select GET_TABLE_COUNT( 'spr' , 'testman') from dual ; GET_TABLE_COUNT('SPR','TESTMAN
------------------------------
15 SQL> select GET_TABLE_COUNT( 'U_Oausr' , 'tm') from dual ; GET_TABLE_COUNT('U_OAUSR','TM'
------------------------------
10 SQL> 说明:
-- DBMS_SQL.DEFINE_COLUMN( V_CursorId , 1 , 0 ) ; 里的“0”是什么意思?
DEFINE_COLUMN是用作定义数据类型的,不同的数据类型有不太的定义方式,这里面的“0”通俗点说就是“与‘0’一样的数据类型的意思”,比如定义长度为200的varchar2型的列的时候,可以简化为这样定义:DBMS_SQL.DEFINE_COLUMN( V_CursorId , 1 , 'tmpStr' , 200 ),更多的数据类型列的定义请查看Oracle的pl/sql文档,里面很全。
-- 另外,怎么用联编变量?
联编变量是一种非常好的传递参数的方式,而且不轻易出错。但是既然称之为“联编变量”那就是它只能对Oracle中认为的变量进行联编,而刚才上面的例子中,表面是不能够作为变量的,因此不可以联编,Oracle中认为出现在逻辑表达式右边的才是变量,例如可以这样进行联编变量:
......
V_SqlStr := 'SELECT COUNT(*) FROM TAB WHERE TName LIKE :I_Arg0 ' ; DBMS_SQL.PARSE( V_CursorId , V_SqlStr , DBMS_SQL.V7 ) ;
V_TabName := 'MYTAB' ;
DBMS_SQL.BIND_VARIABLE( V_CursorId , ':I_Arg0' , V_TabName '%' ) ;
......
8i以后的版本这样写也行
CREATE OR REPLACE FUNCTION GET_TABLE_COUNT(
I_TabNa IN VARCHAR2 ,
I_Owner IN VARCHAR2 DEFAULT NULL
)
RETURN NUMBER
IS
V_RtnVal NUMBER ;
V_TabName VARCHAR2(300) ;
BEGIN
IF LENGTHB( RTRIM( LTRIM( NVL( I_Owner , '' ) ) ) ) = 0 THEN
V_TabName := I_TabNa ;
ELSE
V_TabName := I_Owner '.' I_TabNa ;
END IF ; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' V_TabName INTO V_RtnVal ;
RETURN V_RtnVal ;
EXCEPTION
WHEN OTHERS THEN
RETURN 0 ;
END GET_TABLE_COUNT ;   SQL*PLUS环境输入'&字符'的方法 我们知道在SQL*PLUS默认环境里会把'&字符'当成变量来处理.         有些时候我们也需要在SQL>的符号下输入'&字符', 只需要改变SQL*PLUS下一个环境变量define即可.
       
          SQL> set define off;         是把默认的&绑定变量的功能取消, 可以把'&字符'当成普通字符处理         SQL> set define on;         打开&绑定变量的功能, &后面的字符串当变量使用.         SQL> show define;         查看当前SQL*PLUS的define状态
       
        举例说明:
        ---------------------------------------------------------------       
        SQL> CREATE TABLE TEST3 (
                  ID    NUMBER (2)    PRIMARY KEY,
                  NAME  VARCHAR2 (20));
       
        SQL> show define;
        define "&" (hex 26)                 
       
        SQL> insert into test3 values(1,'sgs&a&n');
        Enter value for a: abc
        Enter value for n: 456
        old   1: insert into test3 values(1,'sgs&a&n')
        new   1: insert into test3 values(1,'sgsabc456')         1 row created.         SQL> commit;         Commit complete.         SQL> set define off;         SQL> insert into test3 values(2,'sgs&a&n');
       
        1 row created.         SQL> commit;         Commit complete.
        SQL> select * from test3;         ID NAME
        -- --------------------
         1 sgsabc456
         2 sgs&a&n

上一篇:Oracle一些常用的SQL 人气:401
下一篇:Oracle-常用监控SQL 人气:305
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵