- 管理员权限的软件不能开机自启动的解决方法
ss_ctrl
这是几种解决方法:1.将启动参数写入到32位注册表里面去在64位系统下我们64位的程序访问此HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run注册表路径,是可以正确访问的,32位程序访问此注册表路径时,默认会被系统自动映射到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft
- Java多线程相关面试题整理
长河落日袁同学
不积跬步无以至千里java笔记多线程锁面试
目录1.什么是线程和进程?线程与进程有什么区别?那什么是上下文切换?进程间怎么通信?什么是用户线程和守护线程?2.并行和并发的区别?3.创建线程的几种方式?Runnable接口和Callable接口的区别?run()方法和start()有什么区别?4.Java线程状态和方法?描述线程的生命周期?一个线程两次调用start()方法会出现什么情况?sleep()和wait()方法的区别是什么?5.并发
- “ssh_dispatch_run_fatal: Connection to x.x.x.x port 22: message authentication code incorrect“报错解决方法
守月满空山雪照窗
Linuxssh运维
ssh远程连接:
[email protected]报错如下:CorruptedMAConinput.ssh_dispatch_run_fatal:Connectiontox.x.x.xport22:messageauthenticationcodeincorrect执行如下命令:ssh-Qmac可以看到:hmac-sha1hmac-sha1-96hmac-sha2-256hmac-sha2
- unicorn 部署 FastAPI 应用程序
九品神元师
fastapi
本地部署本地开发调试过程中,我通常是这样启动Fastapi服务的在终端中运行:uvicornmain:app--host0.0.0.0--port80当然,也可以python脚本启动:importuvicornuvicorn.run(app="main:app",host="0.0.0.0",port=8088,reload=True)这样就好启动一个服务,reload=True支持热重载,方便
- springboot自动装配和统一配置分析
DEARM LINER
springbootjava后端
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言spring项目搭建1、idea创建maven项目,pom文件引入springboot依赖2、创建启动类1、自动装配1.1、@SpringBootApplication1.2、SpringApplication.run()2、统一配置管理1、SpringApplication.run(),找到相关的配置文件,加入解析到到e
- Ubuntu+Qt+SDL2+FFmpeg
DarcyZhou
此文档用于Ubuntu系统中搭建FFmpeg的开发环境。Qt作为开发软件,SDL2是一套开放源代码的跨平台多媒体开发库。1.安装Qt(1)下载版本:qt-opensource-linux-x64-5.9.8.runimage.png(2)安装给文件添加可执行权限:sudochmod-R777qt-opensource-linux-x64-5.9.8.run开始安装:安装过程中选择全部安装即可。(需
- python并发与并行(十一) ———— 让asyncio的事件循环保持畅通,以便进一步提升程序的响应能力
bug404_
python并发与并行python开发语言
前一篇blog说明了怎样把采用线程所实现的项目逐步迁移到asyncio方案上面。迁移后的run_tasks协程,可以将多份输入文件通过tail_async协程正确地合并成一份输出文件。importasyncio#OnWindows,aProactorEventLoopcan'tbecreatedwithin#threadsbecauseittriestoregistersignalhandlers
- Vue框架运行 npm run dev 报错“ error in ./src/pages/login/index.vue”的解决
好家伙VCC
vue小程序jsvuejswebvue.js前端
Vue框架运行npmrundev报错“errorin./src/pages/login/index.vue”的解决事件经过;在VisualStudioCode中开发小程序时,打开别人的程序终端运行“npmrundev”时报错/****************乱七八糟的&&&&&&&&&&&&/errorin./src/pages/login/index.vue//#################
- java面向对象——多态
二十四桥明月夜436
java开发语言后端
java面向对象——多态多态:同一方法可以根据发送的对象不同而采用多种行为方式。即方法的多态。在Java中,一个对象的实际类型是确定的而对象的应用类型是不确定的。多态存在的条件:有继承关系子类重写了父类的方法父类的引用指向了子类的对象示例:publicclassPerson{publicvoidrun(){System.out.println("run");}}publicclassStudent
- “Debugger listening on [::]:25950” node.js调试时出现端口占用的问题,run没问题 debug时老提示端口占用 。Error: listen EADDRI
acoolgiser
Node.JSnode.jsdebug端口被占用debug可以run但是不能debugError:listenEADDRIDebuggerlisteningon
花了两天半时间!!!终于解决了这个问题。。。故总结于此在node.js多进程项目中,程序直接run没问题,但debug时老提示端口占用。“Debuggerlisteningon[::]:25951”node.js调试时出现端口占用的问题,。出现的错误为“Error:listenEADDRI”,而且端口是动态变化的。错误如下:Debuggerlisteningon[::]:25951Error:li
- 【Python中处理多线程的几种方法】
小九不懂SAP
我的Python日记python开发语言多线程
一、使用threading模块*Python的标准库提供了一个`threading`模块,它允许你创建和管理线程。*你可以通过继承`threading.Thread`类并重写其`run`方法来定义线程的行为。*你也可以使用`threading.Thread`的构造函数直接传递一个目标函数和参数来启动线程。*线程之间的同步可以使用锁(如`threading.Lock`或`threading.RLoc
- Ubuntu 开机出现 recovering journal 无法进入图形界面解决流程(不通用,自用)
Artintel
学习ubuntu
远程连接进入命令行:rm-rf/etc/X11/xorg.confcp/etc/X11/xorg.conf.failsafe/etc/X11/xorg.confsudoservicelightdmstopsudoapt-getremovenvidia*cdjohn/qudong+cuda9.0\+\cudnn/sudochmoda+xnv.runsudo./nv.run-no-x-check-no
- gdb常用命令
过好每一天的女胖子
linuxgdblinuxgdb
文章目录1、GDB2、常用命令gdb可执行文件名run(r)/start运行程序break/bclear/deletedisable/enabledisplayjumpwhatisinfothreadbacktrace/btnext(n)/nextistep(s)/stepifinishuntilcallsetprint/plistwatch/awatch/rwatchcatch/tcatchxc
- Java基础——深入理解Java中的多线程(超级详细,值得你看)
2401_84558508
作者\/java开发语言
开发中优先选择实现Runnable方式原因:实现的方式没有类的单继承性的局限性实现的方式更适合来处理多个线程共享数据的情况相同点:都需要重写run(),将线程要执行的代码声明在run()方法中线程的生命周期解决线程安全问题;使用同步代码块packagecom.haust.java;/*出现线程安全问他的解决方法:当一个线程a在操作ticket的时候,其他线程不能参与进来,直到线程参与进来,也操作完
- docker打印容器启动命令和输出dockerfile
liujiangxu
dockerdocker容器运维
runlike:通过容器打印启动命令通过pip方式安装pipinstallrunlike通过容器方式安装(永久别名:配置在~/.bashrc中)aliasrunlike="dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sockassaflavie/runlike"用法:runlike容器名/容器idrunlike-p容器名/容器id示例:r
- 研1日记5
qq_55033799
人工智能深度学习
x=torch.tensor(x),numpy转tensor三维矩阵相加screen-Spid进入之前创建好的screentranspose()只能一次操作两个维度;permute()可以一次操作多维数据,且必须传入所有维度数,transpose()中的dim没有数的大小区分;permute()中的dim有数的大小区分PyTorch两大转置函数transpose()和permute(),以及Run
- XCode里的Run,Test,Profile,Analyze
_compass
点击XCode中左上角三角符号,此符号的作用是:Buildandthenrunthecurrentscheme.Run,Test,Profile,Analyze的区别是:•Runwillbuildandrunthetargetontheselecteddeviceorsimulator.•Testwillbuildyourtargetandrunitsunittests(YourTargetNam
- ray.tune文档总结
AI大司马
python人工智能深度学习
ray.tune文档总结tune.runconfig指定超参数的搜索方法ConcurrencyLimiter搜索算法scheduler试验调度程序分析资源(并行、GPU、分布式)原文档请看这里https://docs.ray.io/en/latest/tune/key-concepts.htmltune.run执行超参数调整、用于管理实验,例如日志检查、提前停止tune.run(trainable
- 手把手教你用Python部署自己的VPN_python strongswan
2401_84970250
程序员pythonjava网络
}#构建VPN连接命令_command=["sudo","strongswan","up",_config["username"],"--server",_config["server_ip"],"--username",_config["username"],"--password",_config["password"]]#启动VPN连接subprocess.run(_command)defs
- 编写docker
程序猿小唐
docker容器运维
1构建docker镜像文件名:Dockerfile指令:dockerbuild--squash-t:-frelease.dockerfile.CMD在dockerrun时运行。RUN是在dockerbuild。ENV是环境变量#使用方法:dockerbuild--squash-t:-frelease.dockerfile.FROMscheduler_base:latest#scheduler_ba
- 若依ruoyi-ui执行npm run dev启动报错:esnext.set.difference.v2.js in ./src/utils/index.js 处理方案
爱摄影的程序猿
uinpm前端
一、错误现象:ERRORFailedtocompilewith7errors09:05:43Thesedependencieswerenotfound:*core-js/modules/esnext.set.difference.v2.jsin./src/utils/index.js*core-js/modules/esnext.set.intersection.v2.jsin./src/util
- 极兔速递小程序任务脚本
点云-激光雷达-Slam-三维牙齿
其他小程序算法python
脚本用于“极兔速递小程序”的每日签到操作。通过模拟网络请求登录账号,获取用户信息,执行每日签到操作。支持多账号操作,并能通过微信推送签到结果和相关信息。类RUN-__init__:初始化类,设置用户信息、会话和请求头。-do_request:发送HTTP请求并返回响应(在当前脚本中未被使用,但可以用来进行通用的请求处理)。-qureyMyselfGrow:获取用户信息,包括手机号、用户ID和成长值
- System.getProperty,System.getenv().get(),environment.getProperty区别
spum
java前端服务器
启动类:@SpringBootApplicationpublicclassM2Application{publicstaticvoidmain(String[]args){System.setProperty("a.x","xx_xx");//如果放到run下面不会生效并且在后续System.getProperty("a.x")也是null//如果-D或者环境变量中也设置了,生效的还是这里Spri
- python setup.py egg_info did not run successfully-python debug-1
让学习成为一种生活方式
linuxpythonpython
降级pip安装包,亲测有效尝试1pipinstall--upgradepippipinstall--upgradesetuptoolspipinstallez_setup无效原因:pip依据python兼容最高版本,对于部分安装包并不合适。尝试2(降级)pipinstallsetuptools==39.1.0pipinstall--upgradepipsetuptools==57.5.0降级成功后
- python setup.py egg_info did not run successfully.
聪明小萝卜
常见报错pythonpython
在安装emit的时候遇到以下报错CollectingemitUsingcachedemit-0.4.0.tar.gz(13kB)Preparingmetadata(setup.py)...errorerror:subprocess-exited-with-error×pythonsetup.pyegg_infodidnotrunsuccessfully.│exitcode:1╰─>[51lines
- Python subprocess库常用函数
YH美洲大蠊
python服务器
1.subprocess.run():应用场景:执行系统命令,获取命令执行结果。作用:运行命令,等待命令完成,然后返回CompletedProcess实例。参数:args:要执行的命令及其参数,可以是一个字符串或一个参数列表。capture_output:如果为True,则捕获命令的输出。input:提供给子进程的输入数据。text:如果为True,则输出和错误将是文本格式。check:如果为Tr
- python subprocessing Popen、run
何乐乐和何了了
pythonpython
subprocessingPopen、runPopen是非阻塞的,run是阻塞的。importsubprocessasspself.p=sp.Popen(command)#self.p=sp.run(command)
- 【python 实用性】浅谈subprocess中 Popen() 和 run()方法
黄小莫
python自动化
文章目录run()和Popen()介绍run()和Popen()用法分享一波提示:以下仅为本人个人观点,仅供参考,不足之处欢迎评论,共勉run()和Popen()介绍subprocess的run()和Popen()都是子进程管理的方法,启动新的子进程并执行外部命令的方法.Popen:更底层、更灵活的接口。创建一个新的进程并根据给定的参数执行命令,不会因等待这个命令执行完成而阻塞别的子进程的执行。这
- 【Docker】Dockerfile 文件编写
cangloe
dockerdocker容器运维
编写Dockerfile是创建Docker镜像的核心步骤。Dockerfile是一个文本文件,其中包含了构建镜像所需的一系列指令和配置。在本文中,我们将详细介绍Dockerfile的编写,包括其基本结构、常用指令、优化技巧和示例。Dockerfile基本结构一个典型的Dockerfile由一系列指令组成,每个指令定义了镜像构建过程中的一个步骤。常见的指令包括FROM、RUN、COPY、CMD、EX
- 编写Dockerfile第二版
道不贱卖,法不轻传
Docker虚拟化docker容器
目标更快的构建速度更小的Docker镜像大小更少的Docker镜像层充分利用镜像缓存增加Dockerfile可读性让Docker容器使用起来更简单总结编写.dockerignore文件容器只运行单个应用将多个RUN指令合并为一个基础镜像的标签不要用latest每个RUN指令后删除多余文件选择合适的基础镜像(alpine版本最好)设置WORKDIR和CMD使用ENTRYPOINT(可选)在entry
- Spring4.1新特性——综述
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
- Schema与数据类型优化
annan211
数据结构mysql
目前商城的数据库设计真是一塌糊涂,表堆叠让人不忍直视,无脑的架构师,说了也不听。
在数据库设计之初,就应该仔细揣摩可能会有哪些查询,有没有更复杂的查询,而不是仅仅突出
很表面的业务需求,这样做会让你的数据库性能成倍提高,当然,丑陋的架构师是不会这样去考虑问题的。
选择优化的数据类型
1 更小的通常更好
更小的数据类型通常更快,因为他们占用更少的磁盘、内存和cpu缓存,
- 第一节 HTML概要学习
chenke
htmlWebcss
第一节 HTML概要学习
1. 什么是HTML
HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它规定了自己的语法规则,用来表示比“文本”更丰富的意义,比如图片,表格,链接等。浏览器(IE,FireFox等)软件知道HTML语言的语法,可以用来查看HTML文档。目前互联网上的绝大部分网页都是使用HTML编写的。
打开记事本 输入一下内
- MyEclipse里部分习惯的更改
Array_06
eclipse
继续补充中----------------------
1.更改自己合适快捷键windows-->prefences-->java-->editor-->Content Assist-->
Activation triggers for java的右侧“.”就可以改变常用的快捷键
选中 Text
- 近一个月的面试总结
cugfy
面试
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46753275
前言
打算换个工作,近一个月面试了不少的公司,下面将一些面试经验和思考分享给大家。另外校招也快要开始了,为在校的学生提供一些经验供参考,希望都能找到满意的工作。 
- HTML5一个小迷宫游戏
357029540
html5
通过《HTML5游戏开发》摘抄了一个小迷宫游戏,感觉还不错,可以画画,写字,把摘抄的代码放上来分享下,喜欢的同学可以拿来玩玩!
<html>
<head>
<title>创建运行迷宫</title>
<script type="text/javascript"
- 10步教你上传githib数据
张亚雄
git
官方的教学还有其他博客里教的都是给懂的人说得,对已我们这样对我大菜鸟只能这么来锻炼,下面先不玩什么深奥的,先暂时用着10步干净利索。等玩顺溜了再用其他的方法。
操作过程(查看本目录下有哪些文件NO.1)ls
(跳转到子目录NO.2)cd+空格+目录
(继续NO.3)ls
(匹配到子目录NO.4)cd+ 目录首写字母+tab键+(首写字母“直到你所用文件根就不再按TAB键了”)
(查看文件
- MongoDB常用操作命令大全
adminjun
mongodb操作命令
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令 如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。
一
- bat调用jar包并传入多个参数
aijuans
下面的主程序是通过eclipse写的:
1.在Main函数接收bat文件传递的参数(String[] args)
如: String ip =args[0]; String user=args[1]; &nbs
- Java中对类的主动引用和被动引用
ayaoxinchao
java主动引用对类的引用被动引用类初始化
在Java代码中,有些类看上去初始化了,但其实没有。例如定义一定长度某一类型的数组,看上去数组中所有的元素已经被初始化,实际上一个都没有。对于类的初始化,虚拟机规范严格规定了只有对该类进行主动引用时,才会触发。而除此之外的所有引用方式称之为对类的被动引用,不会触发类的初始化。虚拟机规范严格地规定了有且仅有四种情况是对类的主动引用,即必须立即对类进行初始化。四种情况如下:1.遇到ne
- 导出数据库 提示 outfile disabled
BigBird2012
mysql
在windows控制台下,登陆mysql,备份数据库:
mysql>mysqldump -u root -p test test > D:\test.sql
使用命令 mysqldump 格式如下: mysqldump -u root -p *** DBNAME > E:\\test.sql。
注意:执行该命令的时候不要进入mysql的控制台再使用,这样会报
- Javascript 中的 && 和 ||
bijian1013
JavaScript&&||
准备两个对象用于下面的讨论
var alice = {
name: "alice",
toString: function () {
return this.name;
}
}
var smith = {
name: "smith",
- [Zookeeper学习笔记之四]Zookeeper Client Library会话重建
bit1129
zookeeper
为了说明问题,先来看个简单的示例代码:
package com.tom.zookeeper.book;
import com.tom.Host;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Wat
- 【Scala十一】Scala核心五:case模式匹配
bit1129
scala
package spark.examples.scala.grammars.caseclasses
object CaseClass_Test00 {
def simpleMatch(arg: Any) = arg match {
case v: Int => "This is an Int"
case v: (Int, String)
- 运维的一些面试题
yuxianhua
linux
1、Linux挂载Winodws共享文件夹
mount -t cifs //1.1.1.254/ok /var/tmp/share/ -o username=administrator,password=yourpass
或
mount -t cifs -o username=xxx,password=xxxx //1.1.1.1/a /win
- Java lang包-Boolean
BrokenDreams
boolean
Boolean类是Java中基本类型boolean的包装类。这个类比较简单,直接看源代码吧。
public final class Boolean implements java.io.Serializable,
- 读《研磨设计模式》-代码笔记-命令模式-Command
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* GOF 在《设计模式》一书中阐述命令模式的意图:“将一个请求封装
- matlab下GPU编程笔记
cherishLC
matlab
不多说,直接上代码
gpuDevice % 查看系统中的gpu,,其中的DeviceSupported会给出matlab支持的GPU个数。
g=gpuDevice(1); %会清空 GPU 1中的所有数据,,将GPU1 设为当前GPU
reset(g) %也可以清空GPU中数据。
a=1;
a=gpuArray(a); %将a从CPU移到GPU中
onGP
- SVN安装过程
crabdave
SVN
SVN安装过程
subversion-1.6.12
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-openssl=/
- sql 行列转换
daizj
sql行列转换行转列列转行
行转列的思想是通过case when 来实现
列转行的思想是通过union all 来实现
下面具体例子:
假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
*/
/*
想变成
姓名 &
- MySQL--主从配置
dcj3sjt126com
mysql
linux下的mysql主从配置: 说明:由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低, Master的版本肯定不能高于Slave版本。(版本向下兼容)
mysql1 : 192.168.100.1 //master mysq
- 关于yii 数据库添加新字段之后model类的修改
dcj3sjt126com
Model
rules:
array('新字段','safe','on'=>'search')
1、array('新字段', 'safe')//这个如果是要用户输入的话,要加一下,
2、array('新字段', 'numerical'),//如果是数字的话
3、array('新字段', 'length', 'max'=>100),//如果是文本
1、2、3适当的最少要加一条,新字段才会被
- sublime text3 中文乱码解决
dyy_gusi
Sublime Text
sublime text3中文乱码解决
原因:缺少转换为UTF-8的插件
目的:安装ConvertToUTF8插件包
第一步:安装能自动安装插件的插件,百度“Codecs33”,然后按照步骤可以得到以下一段代码:
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a30980927
- 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM
geeksun
PHP
CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。 FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不
- Git push 报错 "error: failed to push some refs to " 解决
hongtoushizi
git
Git push 报错 "error: failed to push some refs to " .
此问题出现的原因是:由于远程仓库中代码版本与本地不一致冲突导致的。
由于我在第一次git pull --rebase 代码后,准备push的时候,有别人往线上又提交了代码。所以出现此问题。
解决方案:
1: git pull
2:
- 第四章 Lua模块开发
jinnianshilongnian
nginxlua
在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发;而且模块化是高性能Lua应用的关键。使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享;另外注意之前我们使用init_by_lua中初
- java.lang.reflect.Proxy
liyonghui160com
1.简介
Proxy 提供用于创建动态代理类和实例的静态方法
(1)动态代理类的属性
代理类是公共的、最终的,而不是抽象的
未指定代理类的非限定名称。但是,以字符串 "$Proxy" 开头的类名空间应该为代理类保留
代理类扩展 java.lang.reflect.Proxy
代理类会按同一顺序准确地实现其创建时指定的接口
- Java中getResourceAsStream的用法
pda158
java
1.Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 2. Class.getClassLoader.get
- spring 包官方下载地址(非maven)
sinnk
spring
SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径:
http://repo.springsource.org/libs-release-local/org/springframework/spring/
s
- Oracle学习笔记(7) 开发PLSQL子程序和包
vipbooks
oraclesql编程
哈哈,清明节放假回去了一下,真是太好了,回家的感觉真好啊!现在又开始出差之旅了,又好久没有来了,今天继续Oracle的学习!
这是第七章的学习笔记,学习完第六章的动态SQL之后,开始要学习子程序和包的使用了……,希望大家能多给俺一些支持啊!
编程时使用的工具是PLSQL