Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

知归系列 #3

Open
ckjbug opened this issue Nov 22, 2019 · 2 comments
Open

知归系列 #3

ckjbug opened this issue Nov 22, 2019 · 2 comments

Comments

@ckjbug
Copy link
Owner

ckjbug commented Nov 22, 2019

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
Copy link
Owner Author

ckjbug commented Sep 13, 2020

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
Copy link
Owner Author

ckjbug commented Sep 19, 2020

VBS基础教程

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant