当前位置:  数据库>oracle
本页文章导读:
    ▪oracle的字符集(NLS_LANGUAGE)      数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。 SQL> select * from nls_database_parameters;PARAMETER VALUE------------------------------ ------------.........
    ▪Oracle分页存储过程以及C#调用      最近在做项目的时候需要对数据进行分页查询,这个在Web端属于很常见的,但是在桌面端,貌似大家都不这么干,不过我在项目中要操作系统的日志,觉得必须要分页才行了,因为系统的日志.........
    ▪Oracle中强行断开用户连接的方法      Oracle中强行断开用户连接的方法 首先查找目标用户的当前进程,注意是serial#而不是serial,网上有的介绍漏掉了#: select sid,serial# from v$session where username='ytest'; 使用此语句会返回一个进.........

[1]oracle的字符集(NLS_LANGUAGE)
    来源:    发布时间: 2013-10-29

数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。


 



SQL> select * from nls_database_parameters;

PARAMETER VALUE
------------------------------ -------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM

PARAMETER VALUE
------------------------------ ------------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 11.2.0.1.0


 



客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表



 1 SQL> select * from nls_instance_parameters;
2
3 PARAMETER VALUE
4 ------------------------------------------------------------ ----------------------------
5 NLS_LANGUAGE SIMPLIFIED CHINESE
6 NLS_TERRITORY CHINA
7 NLS_SORT
8 NLS_DATE_LANGUAGE
9 NLS_DATE_FORMAT
10 NLS_CURRENCY
11 NLS_NUMERIC_CHARACTERS
12 NLS_ISO_CURRENCY
13 NLS_CALENDAR
14 NLS_TIME_FORMAT
15 NLS_TIMESTAMP_FORMAT
16
17 PARAMETER VALUE
18 ------------------------------------------------------------ ----------------------------
19 NLS_TIME_TZ_FORMAT
20 NLS_TIMESTAMP_TZ_FORMAT
21 NLS_DUAL_CURRENCY
22 NLS_COMP BINARY
23 NLS_LENGTH_SEMANTICS BYTE
24 NLS_NCHAR_CONV_EXCP FALSE
25
26 已选择17行。


 




  会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,



SQL>  select * from nls_session_parameters;

PARAMETER VALUE
------------------------------------------------------------ -------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY ?
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM

PARAMETER VALUE
------------------------------------------------------------ -------------------------------
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY ?
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

已选择17行。


表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。



  客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。


 


注:


1.通过alter system set nls_language='AMERICAN' scope=spfile; 可以更改nls_database_parameters和nls_instance_parameters的nls_language


 


2. 通过alter session set nls_language='SIMPLIFIED CHINESE'; 可以更改nls_session_parameters的nls_language


 

本文链接


    
[2]Oracle分页存储过程以及C#调用
    来源:    发布时间: 2013-10-29

最近在做项目的时候需要对数据进行分页查询,这个在Web端属于很常见的,但是在桌面端,貌似大家都不这么干,不过我在项目中要操作系统的日志,觉得必须要分页才行了,因为系统的日志会随着系统的运行而越来越大了,所以必须分页来处理,以前在MS Sql Server 中用过分页,然后直接把SQL语句贴过来,发现不能用,于是百度谷歌了半天,找了好几个网上的例子都没有成功,最后结合了网上的两个例子,自己做了小部分的修改,终于OK了,这里我把SQL语句贴出来,并且把C#调用Oracle存储过程的代码页贴出来,如果有不好的地方,大家指正,勿喷!

1、分页存储过程:

首先需要新建一个包,至于为什么要这么做,我没有深究,如有童鞋知道的话,只会一声哈

--创建包

Create or Replace package PCK_System is
type T_Cursor is ref Cursor;
end PCK_System;

--创建存储过程

CREATE OR REPLACE PROCEDURE PaggingProcedure
(p_tableName in varchar2, --表名
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in Number, --当前页
p_pageSize in Number, --每页显示记录条数
p_fields in varchar2, --要查询的列
p_totalRecords out Number, --总记录数
p_totalPages out Number, --总页数
v_cur out PCK_System.T_Cursor) --返回的结果集
IS
v_sql VARCHAR2(2000) := ''; --sql语句
v_startRecord Number(4); --开始显示的记录条数
v_endRecord Number(4); --结束显示的记录条数
BEGIN
--记录中总记录条数

v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' where ';
IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN
v_sql := v_sql || p_strWhere;
END IF;
EXECUTE IMMEDIATE v_sql INTO p_totalRecords;

--根据页大小计算总页数
IF MOD(p_totalRecords,p_pageSize) = 0 THEN

p_totalPages:=trunc(p_totalRecords/p_pageSize,0);
ELSE

p_totalPages:=trunc(p_totalRecords/p_pageSize,0)+1;
END IF;

--实现分页查询
v_startRecord := (p_curPage - 1) * p_pageSize + 1;
v_endRecord := p_curPage * p_pageSize;
v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM ' ||
'(SELECT '|| p_fields ||' FROM ' || p_tableName;
IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN
v_sql := v_sql || ' WHERE ' || p_strWhere;
END IF;
IF p_orderColumn IS NOT NULL or p_orderColumn <> '' THEN
v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;
END IF;
v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '
|| v_startRecord;
--DBMS_OUTPUT.put_line(v_sql);
OPEN v_cur FOR v_sql;

END PaggingProcedure;

2、用C#调用存储过程

/// <summary>
/// 分页数据
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="RetureFields">查询返回字段(如果返回所有的则传入*)</param>
/// <param name="strWhere">查询条件</param>
/// <param name="PageSize">每页显示的记录数</param>
/// <param name="CurPage">当前页数</param>
/// <param name="RowCount">所有记录数</param>
/// <param name="totalPage">总页数</param>
/// <param name="sortField">排序字段</param>
/// <param name="sortType">排序类型:1表示降序,0表示升序</param>
/// <returns></returns>
public static DataTable GetPageList(string TableName, string RetureFields, string strWhere, int PageSize, int CurPage, out int RowCount,out int totalPage, string sortField,int sortType)
{

OracleParameter[] parameters = {
new OracleParameter("p_tableName", OracleType.NVarChar),
new OracleParameter("p_strWhere", OracleType.NVarChar),
new OracleParameter("p_orderColumn", OracleType.NVarChar),
new OracleParameter("p_orderStyle", OracleType.NVarChar),
new OracleParameter("p_curPage", OracleType.Number),
new OracleParameter("p_pageSize", OracleType.Number),
new OracleParameter("p_fields", OracleType.NVarChar),
new OracleParameter("p_totalRecords", OracleType.Number),
new OracleParameter("p_totalPages", OracleType.Number),
new OracleParameter("v_cur",OracleType.Cursor)};
parameters[0].Direction = ParameterDirection.Input;
parameters[1].Direction = ParameterDirection.Input;
parameters[2].Direction = ParameterDirection.Input;
parameters[3].Direction = ParameterDirection.Input;
parameters[4].Direction = ParameterDirection.Input;
parameters[5].Direction = ParameterDirection.Input;
parameters[6].Direction = ParameterDirection.Input;
parameters[7].Direction = ParameterDirection.Output;
parameters[8].Direction = ParameterDirection.Output;
parameters[9].Direction = ParameterDirection.Output;

parameters[0].Value = TableName;
parameters[1].Value = strWhere;
parameters[2].Value = sortField;
if (sortType == 0)
{
parameters[3].Value = "asc";
}
else
{
parameters[3].Value = "desc";
}
parameters[4].Value = CurPage;
parameters[5].Value = PageSize;
parameters[6].Value = RetureFields;

OracleCommand cmd = new OracleCommand("PaggingProcedure");//存储过程名称
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(parameters);
DataTable dt = RunProcedureCmd(cmd);
RowCount = Convert.ToInt32(cmd.Parameters[7].Value.ToString());//返回总记录数
totalPage = Convert.ToInt32(cmd.Parameters[8].Value.ToString());
return dt;
}

/// <summary>
/// 执行存储过程 返回DataTable
/// </summary>
/// <param name="cmd"></param>
/// <returns></returns>
public static DataTable RunProcedureCmd(OracleCommand cmd)
{
DataTable result = new DataTable();
OracleConnection conn = new OracleConnection(connectionString);//你自己的链接字符串
try
{
if ((conn.State == ConnectionState.Closed))
{
conn.Open();
}
cmd.Connection = conn;
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(result);
da.Dispose();
conn.Close();
conn.Dispose();

return result;
}
catch (Exception ex)
{
conn.Close();
conn.Dispose();
throw ex;
}
}

上述代码经过本人多次测试,都是可以运行的,大家可以放心大胆的用,如有好的建议或者意见,记得留言哦

本文链接


    
[3]Oracle中强行断开用户连接的方法
    来源:    发布时间: 2013-10-29
Oracle中强行断开用户连接的方法
 
首先查找目标用户的当前进程,注意是serial#而不是serial,网上有的介绍漏掉了#:
 
select sid,serial# from v$session where username='ytest';
 
使用此语句会返回一个进程列表,每行有两个数字,然后用数字替代下面的sid和serial
  
alter system kill session 'sid,serial';
例如
alter system kill session '222,123';
 
通过select 语句可能返回多行记录,所以要多次执行alter语句.

本文链接


    
最新技术文章:
▪current online redo log缺失后的恢复
▪ORA-600 2662错误解决实例
▪ORA-00600 2662错误解决方法
▪Oracle Hidden Parameter:_allow_resetlogs_corruption
▪Oracle诊断事件列表
▪Oracle 隐含参数 _disable_logging 详解
▪ORA-00600 [2662]错误解决过程
▪Oracle里常见的执行计划
▪Oracle里另外一些典型的执行计划
数据库 iis7站长之家
▪Oracle固定SQL的执行计划(一)---SQL Profile
▪Oracle固定SQL的执行计划(二)---SPM
▪同一环境下新建Standby RAC库
▪Oracle快速克隆安装
▪Oracle单实例启动多个实例
▪Oracle的PLSQL别名中文出现乱码解决方法
▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
▪RMAN-06023: no backup or copy of datafile 16 found to restor...
▪RMAN还原数据库报错问题解决案例
▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
▪Oracle 性能优化建议
▪Oracle SQL语句优化心得
▪Oracle慢SQL监控脚本实现
▪Oracle dblink 查询 tns:无法解析指定的连接标识...
▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
▪Oracle 12C 开启数据库归档模式
▪Solairs系统中配置Oracle 12c 开机启动
▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
▪Oracle ASMM 与AMM之间相互切换
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3