Archive for category 数据库

在c#中使用TransactionScope操作oracle数据库

有需求要将几个操作oracle数据库的方法写到一个事务里面,用到了TransactionScope对象。但使用的时候不是很顺利,先是说不能嵌套事务,仔细检查原来的代码中,的确有事务,那个现在要把几个操作放到一个事务里面,只写删除了单个方法的事务。随之又报了另一个错误。

using (TransactionScope scope = new TransactionScope())
{
    do_ora1();
    do_ora2();
    do_ora3();
    scope.Complete();
}
[DllNotFoundException: 无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。]
   System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment) +157
   System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction) +68
   System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) +33
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1318
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +100
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +116
   System.Data.OracleClient.OracleConnection.Open() +40

在网上查原因,各式各样的都有,我是这样的解决的:

我的oracle版本是10.2,我下载了一个oramts10.dll文件,将这个文件重命名为oramts.dll后复制到oracle\product\10.2.0\db_1\BIN下。就OK了。有些人说下载msvcrtd.dll到system32下面,我试了是没有的。

下载oramts10.dll

生成insert语句

在网上能够搜索出的版本主要有两个:
1. CSDN Sky_blue 所作: proc_insert (可 google)
2. CSDN playyuer 所作: spGenInsertSQL (可 google)
但这两个版本的程序都曾收录到:

http://www.cnblogs.com/kasafuma/articles/109922.html

但这两个版本程序都有局限性:
如果字段太多或字段值的内容太多而无法生成完整正确的 insert into … 的 SQL!
varchar 变量容量不够大!

使用下面的工具可以轻松生成:自动生成Insert 语句的小工具

Connection String:数据库连接
SQL: 需要生成insert语句的查询语句,如:select * from aaa where id=11
TableName:生成的insert into到的表名
下载地址:点击我

ms sql server 2000 查询某个库的所有触发器名称

select   *   from   sysobjects   where id in  (select   parent_obj   from   sysobjects where   xtype='TR' )

sqlserver触发器的新增和删除判断

create TRIGGER [triger_users]   ON  [dbo].[tb_userso]
   FOR INSERT,DELETE
   AS
    --删除
   declare @ID varchar(200)
  IF EXISTS(SELECT 1 FROM deleted)
    begin
           select @ID=ID from deleted
           delete xxx where keyid=@ID
    end
  else
    begin
    select @ID=ID from inserted
    insert into xxx(tabse,keyid,flag) values('TBUP',@ID,0)
    end

oracle function将多行变为逗号分隔

create or replace function GetInfoCategory(infoid in varchar2) return varchar2 is
  Result varchar2(5000);
  cursor cur_tsalary is
    select mic.CATEGORYNAME from InfoCategory ic
    inner join (
    select * from idcs_metadata_infocategory t
connect by prior t.guid=t.fcatecode
start with
t.fcatecode ='0130d7cf' order by t.seqnum ) mic on ic.c_guid=mic.guid where ic.f_guid=infoid;
  cname varchar2(5000);
begin
  open cur_tsalary;
  loop
    fetch cur_tsalary into cname;
    exit when cur_tsalary%notFound;
    Result := Result || ',' || cname;
  end loop;
  close cur_tsalary;
  Result := trim(Result);
  if length(Result) > 0 then
     Result := substr(Result, 2, length(Result)-1);
  end if;
  return(Result);
end GetInfoCategory;

ORA-01536 超出表空间‘USERS’的空间限量

运行命令:

ALTER USER <USERNAME> QUOTA UNLIMITED ON TABLESPACENAME

oracle获取表的字段名称、字段类型、长度、注释、主键的sql语句

select distinct A.column_name name,A.data_type datatype,A.data_length,
A.data_precision 整数位, A.Data_Scale 小数位,
A.nullable isnullable,c.column_name constraint_name,d.comments tablename,
B.comments comments from user_tab_columns A,user_col_comments B ,all_cons_columns C,USER_TAB_COMMENTS D
where a.COLUMN_NAME=b.column_name and A.Table_Name = B.Table_Name
and A.Table_Name = D.Table_Name and (A.TABLE_NAME=c.table_name) and
A.Table_Name=’” + name + “‘

SQLServer设置了自动增长,而可用空间仍然为0

对SQL Server虽然设置了文件的自动增长,但查看可用空间时,其值为0,而用sp_spaceused 存储过程查看数据库内部空间使用情况,发现unallocated space的值为负值。

这是由于内部页计数出错而导致的,通过使用dbcc updateusage (0)对当前数据库进行页统计,就可以得出正确结果。
有人整理了一下dbcc的用法:http://topic.csdn.net/t/20021216/20/1266927.html

解决Dynamic Performance Tables not accessible方法

当我在pl/sql中查询某个表的详细字段信息的时候,报了这样一个错误
sql语句为: Read the rest of this entry »

由一张表更新另一张表

更新bank表中的address字段,通过bank.tyid与banktype的typeid进行关联

update bank set address = (select typename from banktype where bank.tyid=banktype.typeid)
pagepeel by webpicasso.de