sqlserver和oracel的使用心得记录(语句技巧和错误解决)

版权声明:以上纯属个人独自研究成果,仅供参考,转载请注明出处 https://blog.csdn.net/u012847695/article/details/50948914

sqlserver :

“for”错:

USE [master]
GO
EXEC dbo.sp_dbcmptlevel @dbname=数据库名, @new_cmptlevel=90
GO

ORACEL:

ora-00054:资源正忙:

select t2.username,t2.sid,t2.serial#,t2.logon_time

from v$locked_object t1,v$session t2

where t1.session_id=t2.sid order by t2.logon_time;

alter system kill session 'sid,serial#';

查看安装的Oracle客户端安装的是多少位:
在%ORACLE_HOME%\inventory\ContentsXML目录下面找到comps.xml文件,

例如我安装的路径为C:\Oracle_Client\Client64\product\11.2.0\client_1\inventory\ContentsXML\comps.xml
在这个文件中搜索:
如果找到PLAT="NT_AMD64"表示安装的是64位的Oracle 客户端,如果找到PLAT="NT_X86"则表示安装的是32位的Oracle客户端。

oracel语句:存储过程返回数据集:

--利用游标返回结果集
CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR;
END pkg_query;


CREATE OR REPLACE PROCEDURE UP_UserInfo_List_select
       (
        WhereSql         in  varchar2,   --查询条件
        StartIndex       in  Number,  --当前页
        EndIndex         in  Number,  --每页显示记录条数
        RecordCount      out Number,
        v_cur            out SYS_REFCURSOR)   --返回的结果集
IS
   v_sql VARCHAR2(1000) := '';      --sql语句
BEGIN
   --查总记录数
   v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM UserInfo WHERE 1=1';
   IF WhereSql IS NOT NULL or WhereSql <> '' THEN
       v_sql := v_sql || WhereSql;
   END IF;
   EXECUTE IMMEDIATE v_sql INTO RecordCount;

   --实现分页查询
   v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM (SELECT * FROM UserInfo ';
   IF WhereSql IS NOT NULL or WhereSql <> '' THEN
       v_sql := v_sql || ' WHERE 1=1' || WhereSql || ' ORDER BY UserId';
   END IF;

   v_sql := v_sql || ') A WHERE rownum <= ' || EndIndex || ') B WHERE r >= '|| StartIndex;
   DBMS_OUTPUT.put_line(v_sql);
   
   OPEN v_cur FOR v_sql;
   
END UP_UserInfo_List_select;

--执行,plsql这里是看不到结果集,找到这个过程点测试,才能看到。
declare
RecordCount number :=0;
v_cur pkg_query.cur_query;
begin
  UP_UserInfo_List_select('',1,10,RecordCount,v_cur);
  DBMS_OUTPUT.put_line(RecordCount);
end;

  组内排序:

select * from (
select  rank() over (partition by category order by category,sum(price) desc,goodsno) as r,
category,goodsno,SUM(price) amount
from TestCate
group by category,goodsno
)tt where  tt.t<=1

oracel实现split,将字符串转成table

 SELECT REGEXP_SUBSTR('ZJ03800,D01014', '[^,]+', 1, LEVEL, 'i') AS STR  
  FROM DUAL  CONNECT BY LEVEL <=  
  LENGTH('ZJ03800,D01014') - LENGTH(REGEXP_REPLACE('ZJ03800,D01014', ',', ''))+1

猜你喜欢

转载自blog.csdn.net/u012847695/article/details/50948914
今日推荐