ckjbug / xiaokui

🈳天道酬勤(悟生) | Individual Development Plan | Blog
7 stars 1 forks source link

知归系列 #3

Open ckjbug opened 4 years ago

ckjbug commented 4 years ago

Oracle数据库

PL/SQL使用

快捷键 https://www.cnblogs.com/linjiqin/archive/2013/06/24/3152538.html

1,快速选择行:Shift + Home/End 2,找回最近删除的Sql语句(已编译执行过的sql):Ctrl + E 3,智能提示:F6 4,自动替换:快捷输入SQL语句,例如输入s,按下空格,自动替换成SELECT;再例如,输入sf,按下空格,自动替换成SELECT FROM,非常方便,节省了大量的时间去编写重复的SQL语句。 设置方法: 1)、建立一个文本文件shortcuts.txt(一般在PlugIns会自带这个文件),并写入如下内容: i=INSERT u=UPDATE s=SELECT f=FROM w=WHERE o=ORDER BY d=DELETE df=DELETE FROM sf=SELECT FROM sc=SELECT COUNT() FROM sfu=SELECT FROM FOR UPDATE cor=CREATE OR REPLACE p=PROCEDURE fn=FUNCTION t=TIGGER v=VIEW; 复制代码另存到PL/SQL Developer的安装路径下的~/PlugIns目录下 2)、Tools–>Preferences–>User Interface–>Editor–>AutoReplace,选中Enable复选框,然后浏览文件选中之前创建的shortcuts.txt,点击Apply


SQL语法 https://www.cnblogs.com/klb561/p/10527336.html

表 dual;

where:过滤行 group by:对过滤后的行进行分组 having():对分组后的行进行过滤

decode:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

distinct:

nvl:nvl(A, B),如果A为null,则返回B,否则返回A。

instr:字符查找函数 格式一:instr( string1, string2 ) // instr(源字符串, 目标字符串) select instr('helloworld','l') from dual; --返回结果:3 默认第一次出现“l”的位置 select instr('helloworld','lo') from dual; --返回结果:4 即“lo”同时(连续)出现,“l”的位置 select instr('helloworld','wo') from dual; --返回结果:6 即“w”开始出现的位置

格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) // instr(源字符串, 目标字符串, 起始位置, 匹配序号) select instr('helloworld','l',2,2) from dual; --返回结果:4 也就是说:在"helloworld"的第2(e)号位置开始,查找第二次出现的“l”的位置 select instr('helloworld','l',3,2) from dual; --返回结果:4 也就是说:在"helloworld"的第3(l)号位置开始,查找第二次出现的“l”的位置 select instr('helloworld','l',4,2) from dual; --返回结果:9 也就是说:在"helloworld"的第4(l)号位置开始,查找第二次出现的“l”的位置 select instr('helloworld','l',-1,1) from dual; --返回结果:9 也就是说:在"helloworld"的倒数第1(d)号位置开始,往回查找第一次出现的“l”的位置 select instr('helloworld','l',-2,2) from dual; --返回结果:4 也就是说:在"helloworld"的倒数第2(l)号位置开始,往回查找第二次出现的“l”的位置 select instr('helloworld','l',2,3) from dual; --返回结果:9 也就是说:在"helloworld"的第2(e)号位置开始,查找第三次出现的“l”的位置 select instr('helloworld','l',-2,3) from dual; --返回结果:3 也就是说:在"helloworld"的倒数第2(l)号位置开始,往回查找第三次出现的“l”的位置

trunc:对时间类型或者数字进行截取操作 trunc(Date)的用法一般有以下几种: select sysdate from dual select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual select trunc(sysdate,'yyyy') from dual --当年的第一天 select trunc(sysdate,'mm') from dual --当月的第一天 select trunc(sysdate,'dd') from dual --当前时间(精确到天) select trunc(sysdate,'d') from dual --当前星期的第一天 select trunc(sysdate,'hh') from dual --当前时间(精确到小时) select trunc(sysdate,'mi') from dual --当前时间(精确到分钟,没有精确到秒的)

trunc(number)的用法一般有以下几种: trunc(55.5,-1) = 50; //-1(负数)表示从小数点左边第一位截取后面全置为零; trunc(55.55,1) = 55.5; //1(正数)表示小数点后面保留一位; trunc(55.55) = 55; //截取整数部分;

substr:字符截取函数 格式1:substr(string string, int a, int b); 1、string 需要截取的字符串 2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取) 3、b 要截取的字符串的长度 select substr('HelloWorld',0,3) value from dual; //返回结果:Hel,截取从“H”开始3个字符 select substr('HelloWorld',1,3) value from dual; //返回结果:Hel,截取从“H”开始3个字符 select substr('HelloWorld',2,3) value from dual; //返回结果:ell,截取从“e”开始3个字符 select substr('HelloWorld',0,100) value from dual; //返回结果:HelloWorld,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。 select substr('HelloWorld',5,3) value from dual; //返回结果:oWo select substr('Hello World',5,3) value from dual; //返回结果:o W (中间的空格也算一个字符串,结果是:o空格W) select substr('HelloWorld',-1,3) value from dual; //返回结果:d (从后面倒数第一位开始往后取1个字符,而不是3个。原因:下面红色 第三个注解) select substr('HelloWorld',-2,3) value from dual; //返回结果:ld (从后面倒数第二位开始往后取2个字符,而不是3个。原因:下面红色 第三个注解) select substr('HelloWorld',-3,3) value from dual; //返回结果:rld (从后面倒数第三位开始往后取3个字符) select substr('HelloWorld',-4,3) value from dual; //返回结果:orl (从后面倒数第四位开始往后取3个字符)

格式2:substr(string string, int a) ; 1、string 需要截取的字符串 2、a 可以理解为从第a个字符开始截取后面所有的字符串。 select substr('HelloWorld',0) value from dual; //返回结果:HelloWorld,截取所有字符 select substr('HelloWorld',1) value from dual; //返回结果:HelloWorld,截取所有字符 select substr('HelloWorld',2) value from dual; //返回结果:elloWorld,截取从“e”开始之后所有字符 select substr('HelloWorld',3) value from dual; //返回结果:lloWorld,截取从“l”开始之后所有字符 select substr('HelloWorld',-1) value from dual; //返回结果:d,从最后一个“d”开始 往回截取1个字符 select substr('HelloWorld',-2) value from dual; //返回结果:ld,从最后一个“d”开始 往回截取2个字符 select substr('HelloWorld',-3) value from dual; //返回结果:rld,从最后一个“d”开始 往回截取3个字符

like:

trim(ltrim,rtrim):https://www.cnblogs.com/lanzi/archive/2013/01/14/2859666.html

reverse() :字符串翻转函数


存储过程

函数

触发器 https://www.cnblogs.com/klb561/p/11080445.html

语法: create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end 触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发器执行; after:表示在数据库动作之后触发器执行。 触发事件:指明哪些数据库动作会触发此触发器: insert:数据库插入会触发此触发器; update:数据库修改会触发此触发器; delete:数据库删除会触发此触发器。 表名:数据库触发器所在的表。 for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

分析函数 over():


Oracle优化

ckjbug commented 4 years ago

Windows批处理

批处理之家

配套文档

帮助手册

CMD中特殊符号


@each off            --去掉盘符等内容

帮助手册:
/? <=> -help   net user /help 

CD切换目录:

cd /?                --获取使用帮助

cd \                 --跳转到硬盘的根目录

cd C:\WINDOWS        --跳转到当前硬盘的其他文件

d:                   --跳转到其他硬盘

cd /d e:\software    --跳转到其他硬盘的其他文件夹        注意此处必须加/d参数。否则无法跳转。

cd..                 --跳转到上一层目录

算数运算:
set /a 1+ 3          --/a:命令行开关指定等号右边的字符串为被评估的数字表达式。

%  --取余

重定向运算符:
>  --输出到文档  >>  --追加输出
<             <<

查看文档:
type a.txt 

多命令运算符:
&&                    --第一个命令错误则不会执行第二个命令
||                    --第一个命令执行成功则不会执行第二个命令

管道信号:
dir | find ".txt"                 --找出当前路径下所有.txt文件
netstat -ano | find "ESTABLISH"   --找出当前与本机建立连接的所有网络
Demo:要查出那个进程占用了你的端口导致端口冲突
netstat -aon|findstr ":9050"       --查看指定端口的占用情况
tasklist|findstr "2016"           --查看PID对应的进程
taskkill /f /t /im tor.exe        --结束该应用的进程

批处理文件接收参数:
net user %1 %2 /add               --CMD执行:*.bat 参数1 参数2

路径参数:
@echo off
echo %~f0    --C:\Users\Administrator\Desktop\test.bat  %~f0:表示当前批处理的绝对路径,去掉引号的完整路径

echo %~0     --C:\Users\Administrator\Desktop\test.bat  %~0:表示当前批处理的路径,去掉引号的路径

echo %0      --"C:\Users\Administrator\Desktop\test.bat"  ~:去掉当前路径字符串的引号  0:代表你的批处理本身

echo %~d0    --C:

echo %~p0    --\Users\Administrator\Desktop\

echo %~dp0   --C:\Users\Administrator\Desktop\   d p:是FOR 命令的扩展
pause

for循环:

for /r %%i in(*.txt) do(                --/r:遍历子文件夹     %%i:当前的.txt文件
set filename = %%~ni                    --%%~ni:当前的.txt文件名字
set file = %%i
copy %%i %~dp0\Events\%%~ni\abc.txt
copy %~dp0\Input\*.jpg %~dp0\Events\%%~ni\%%~ni.jpg

for /r c:\\ %%i in (*.exe) do echo %%i  --把C盘根目录和每个目录的子目录下面全部的EXE文件都列出来

@echo off
for /l %%i in (1,1,5) do (              --/l:该集表示以增量形式从开始到结束的一个数字序列 in(start,step,end) 
echo %%i
)
pause         
结果:1,2,3,4,5

@echo off
for %%i in (1,1,5) do (
echo %%i
)
pause
结果:1,1,5

for /l %%i in (100,-20,1) do @echo %%i  --输出100,80,60,40,20   
for /l %%i in (1,1,5) do start cmd      --打开5个CMD窗口   
for /l %%i in (1,1,5) do md %%i         --建立从1~5共5个文件夹

for /d %%i in (c:\\*) do echo %%i       --显示c盘根目录下的所有目录    /d :参数只能显示当前目录下的目录名字  
for /d %%i in (???) do echo %%i         --显示当前目录下名字只有1-3个字母的目录

for %%i in (t*.*) do echo %%i           --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径)   
for %%i in (d:\\mydocuments\\*.doc) do @echo %%i     --显示d:\\mydocuments\\目录下与*.doc相匹配的文件   

for /f %%i in (test.txt) do echo %%i    --解析文本,读取字符串(遍历文本的每一行)
for /f "tokens=2 delims=、." %%i in (test.txt) do echo %%i    --delims:字符分割  tokens:提取列内容       每一列用、.分割,选取第二列内容
[for /f命令之—Delims和Tokens用法&总结](https://blog.csdn.net/hutuchongaini/article/details/35290989)

^ 转义符(^<)

if判断:
if "%1" == "%2" goto usage
if not "%1" == "%2" goto usage
if exist C:/a.txt del C:/a.txt
if not exist C:/a.txt del C:/a.txt
Demo:借批处理自动清除系统垃圾
@echo off
if exist c:\windows\temp\*.* del c:\windows\temp\*.*
if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.*
if exist c:\windows\History\*.* del c:\windows\History\*.*
if exist c:\windows\recent\*.* del c:\windows\recent\*.*

: goto:

@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 GOTO start           --leq:less than or equal,小于或等于
pause

@echo off 
set /p input=创建用户请输入1.删除用户请输入2,退出请输入0:
if %input%==1 goto 1
if %input%==2 goto 2
if %input%==0 goto 0
:1
call:创建用户
goto:eof
:2
call:删除用户
goto:eof
:0
exit
call:创建用户
goto:eof
call:删除用户
goto:eof                            --运行goto:eof后,CMD返回并将等待下一命令
:创建用户
set /p user=请输入要创建的用户名:  --/p:命令行开关允许将变量数值设成用户输入的一行输入
set /p pwd=请输入要创建用户的密码:
net user %user% %pwd% /add
echo 当前用户有:
net user
goto:eof
:删除用户
set /p user=请输入要删除的用户名:
net user %user% /del

echo 当前用户有:
net user
pause
goto:eof

pushd 、popd:
切换当前目录
@echo off
c: & cd\ & md mp3        --在 C:\ 建立 mp3 文件夹
md d:\mp4                --在 D:\ 建立 mp4 文件夹
cd /d d:\mp4             --更改当前目录为 d:\mp4
pushd c:\mp3             --保存当前目录,并切换当前目录为 c:\mp3
popd                     --恢复当前目录为刚才保存的 d:\mp4

errorlevel:             --程序返回码
echo %errorlevel%        --每个命令运行结束,可以用这个命令行格式查看返回码。用于判断刚才的命令是否执行成功。默认值为 0,一般命令执行出错会设 errorlevel 为 1
@echo off
dir c:
rem 退出代码为>=1 就跳至标题 1 处执行,>=0 就跳至标题 0 处执行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0
Rem 上面的两行不可交换位置,否则失败了也显示成功。
:0
echo 命令执行成功!
Rem 程序执行完毕跳至标题 exit 处退出
goto exit
:1
echo 命令执行失败!
Rem 程序执行完毕跳至标题 exit 处退出
goto exit
:exit                    --运行exit后,CMD将直接关闭并返回到曾启动Cmd.exe 的程序或返回到“资源管理器”
pause
运行显示:命令执行成功!

setlocal与变量延迟:
@echo off
set a=3
set a=4 & echo %a%
pause
结果:3

@echo off
set a=3
set a=4
echo %a%
pause
结果:4

@echo off
set a=4
set a=5 & echo !a!             --!a!启用变量延迟
pause
结果:5

-------------------------------------------------

访问网址:
explorer http://www.baidu.com

打开文件夹或文件:
start D:\文件夹1               --打开文件夹
start D:\文件夹1\test.txt      --打开文件
start explorer d:\             --调用图形界面打开 D 盘

复制:
copy /?                        --将一份或多份文件复制到另一个位置
xcopy /?                       --复制文件和目录树

重命名:
ren *.txt *.mp3

创建文件夹:
md A,B,C,D

创建文件:
cd .>a.txt                     --当前路径下创建a.txt文件

逐屏显示输出:
more +5 "cmd.txt" > "cmd1.txt" --把当前路径下cmd.txt文件的后5行内容写入cmd1.txt文件中

提取文件名:
dir *.lnk /b > test.txt        --将当前文件夹下所有应用名写入到test.txt文件中

dir *.lnk /b/s > test.txt      --将当前文件夹下所有应用名写入到test.txt文件中(带有文件路径)

-------------------------------------------------

Demo

Demo1:
::修改文件名(拼接日期)
@echo off
set title=title hello                     --这里的%title%,相当于运行title hello这个命令
%title%
set name=%date:~0,10%                     --取%date% 变量从0位开始取10个字符
echo %name%
ren test.txt %name:/=-%test.txt           --%name:/=-%意思是替换name变量值中“/”为“-”
pause

Demo2:
::批处理实现屏幕截图(CMD调用.NET Framework框架中的csc编译器C#代码进行截屏,当然也可以把cs代码写到外面,然后在CMD调用cs编译器进行编译)

@echo off
set "dnfpath=%systemroot%\Microsoft.NET\Framework"
for /f "delims=" %%v in ('dir /ad /b %dnfpath%\v?.*') do (
         if exist "%dnfpath%\%%v\csc.exe" set "cscpath=%dnfpath%\%%v\csc.exe"
)
< "%~f0" more +20 > "%temp%\estCapture.cs"
%cscpath% /out:"%cd%\estCapture.exe" "%temp%\estCapture.cs" 1>nul
estCapture.exe
start estCapture.bmp

::ping -n 1 127.1>nul 中-n 2 的作用主要还是为了缩短ping的时间,127.0.0.1可以缩写成 127.1 它是本机的ip , -n 2 的意思为发送两次数据包 默认为4次 ,>nul的作用是不显示ping的结果
ping -n 2 127.1 1>nul     
del estCapture.exe

goto:eof

:estCapture

using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

public class MyClass
{
        public static void Main()
        {
                        Image img = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height);
                        Graphics g = Graphics.FromImage(img);
                        g.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.AllScreens[0].Bounds.Size);
                        img.Save("estCapture.bmp", ImageFormat.Bmp);
        }
}

Demo3:
::将文本内容写入剪贴板
@echo off
mshta vbscript:clipboardData.SetData("text","将文本内容写入剪贴板")(window.close)
pause

@echo off
type test.txt | clip 
pause

@echo off
set /p str=<test.txt    --赋值当前文件的第一行
echo %str%|clip
pause

强制关闭windows进程:
windows7之下: ntsd -c q -p pid
windows7以上:tskill pid

Demo4:自动清除系统垃圾(Temp)
@echo off
echo 正在清除系统垃圾文件,请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清除系统垃圾完成!
echo. & pause
ckjbug commented 3 years ago

VBS基础教程