EXCEL VBA语句集300

        定制模块行为
(1) Option Explicit ‘强制对模块内所有变量进行声明
Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示
 Option Compare Text ‘字符串不区分大小写
 Option Base 1 ‘指定数组的第一个下标为1
(2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息
(3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置
(4) On Error GoTo 0 ‘恢复正常的错误提示
(5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示
(6) Application.ScreenUpdating=False ‘关闭屏幕刷新
Application.ScreenUpdating=True ‘打开屏幕刷新
(7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能

工作簿
(8) Workbooks.Add() ‘创建一个新的工作簿
(9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿
(10) ThisWorkbook.Save ‘保存工作簿
(11) ThisWorkbook.close ‘关闭当前工作簿
(12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数
(13) ActiveWorkbook.name ‘返回活动工作薄的名称
(14) ThisWorkbook.Name ‘返回当前工作簿名称
ThisWorkbook.FullName ‘返回当前工作簿路径和名称
(15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小
(16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列
(17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化

工作表
(18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数
(19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性)
(20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum
(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前
(22) ActiveSheet.Move After:=ActiveWorkbook. _
Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后
(23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2
(24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1
(25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称
(26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮
(27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示
(28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式
(29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接
(30) ActiveSheet.PageSetup.Orientation=xlLandscape
或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向
(31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径
ActiveSheet.PageSetup.LeftFooter=Application.UserName ‘将用户名放置在活动工作表的页脚

单元格/单元格区域
(32) ActiveCell.CurrentRegion.Select
或Range(ActiveCell.End(xlUp),ActiveCell.End(xlDown)).Select
’选择当前活动单元格所包含的范围,上下左右无空行
(33) Cells.Select ‘选定当前工作表的所有单元格
(34) Range(“A1”).ClearContents ‘清除活动工作表上单元格A1中的内容
Selection.ClearContents ‘清除选定区域内容
Range(“A1:D4”).Clear ‘彻底清除A1至D4单元格区域的内容,包括格式
(35) Cells.Clear ‘清除工作表中所有单元格的内容
(36) ActiveCell.Offset(1,0).Select ‘活动单元格下移一行,同理,可下移一列
(37) Range(“A1”).Offset(ColumnOffset:=1)或Range(“A1”).Offset(,1) ‘偏移一列
Range(“A1”).Offset(Rowoffset:=-1)或Range(“A1”).Offset(-1) ‘向上偏移一行
(38) Range(“A1”).Copy Range(“B1”) ‘复制单元格A1,粘贴到单元格B1中
Range(“A1:D8”).Copy Range(“F1”) ‘将单元格区域复制到单元格F1开始的区域中
Range(“A1:D8”).Cut Range(“F1”) ‘剪切单元格区域A1至D8,复制到单元格F1开始的区域中
Range(“A1”).CurrentRegion.Copy Sheets(“Sheet2”).Range(“A1”) ‘复制包含A1的单元格区域到工作表2中以A1起始的单元格区域中
注:CurrentRegion属性等价于定位命令,由一个矩形单元格块组成,周围是一个或多个空行或列
(39) ActiveWindow.RangeSelection.Value=XX ‘将值XX输入到所选单元格区域中
(40) ActiveWindow.RangeSelection.Count ‘活动窗口中选择的单元格数
(41) Selection.Count ‘当前选中区域的单元格数
(42) GetAddress=Replace(Hyperlinkcell.Hyperlinks(1).Address,mailto:,””) ‘返回单元格中超级链接的地址并赋值
(43) TextColor=Range(“A1”).Font.ColorIndex ‘检查单元格A1的文本颜色并返回颜色索引
Range(“A1”).Interior.ColorIndex ‘获取单元格A1背景色
(44) cells.count ‘返回当前工作表的单元格数
(45) Selection.Range(“E4”).Select ‘激活当前活动单元格下方3行,向右4列的单元格
(46) Cells.Item(5,”C”) ‘引单元格C5
Cells.Item(5,3) ‘引单元格C5
(47) Range(“A1”).Offset(RowOffset:=4,ColumnOffset:=5)
或 Range(“A1”).Offset(4,5) ‘指定单元格F5
(48) Range(“B3”).Resize(RowSize:=11,ColumnSize:=3)
Rnage(“B3”).Resize(11,3) ‘创建B3:D13区域
(49) Range(“Data”).Resize(,2) ‘将Data区域扩充2列
(50) Union(Range(“Data1”),Range(“Data2”)) ‘将Data1和Data2区域连接
(51) Intersect(Range(“Data1”),Range(“Data2”)) ‘返回Data1和Data2区域的交叉区域
(52) Range(“Data”).Count ‘单元格区域Data中的单元格数
Range(“Data”). Columns.Count ‘单元格区域Data中的列数
Range(“Data”). Rows.Count ‘单元格区域Data中的行数
(53) Selection.Columns.Count ‘当前选中的单元格区域中的列数
Selection.Rows.Count ‘当前选中的单元格区域中的行数
(54) Selection.Areas.Count ‘选中的单元格区域所包含的区域数
(55) ActiveSheet.UsedRange.Row ‘获取单元格区域中使用的第一行的行号
(56) Rng.Column ‘获取单元格区域Rng左上角单元格所在列编号
(57) ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions) ‘在活动工作表中返回所有符合条件格式设置的区域
(58) Range(“A1”).AutoFilter Field:=3,VisibleDropDown:=False ‘关闭由于执行自动筛选命令产生的第3个字段的下拉列表

名称
(59) Range(“A1:C3”).Name=“computer” ‘命名A1:C3区域为computer
或Range(“D1:E6”).Name=“Sheet1!book” ‘命名局部变量,即Sheet1上区域D1:E6为book或 Names(“computer”).Name=“robot” ‘将区域computer重命名为robot
(60) Names(“book”).Delete ‘删除名称
(61) Names.Add Name:=“ContentList”,_
RefersTo:=“=OFFSET(Sheet1!A2,0,0,COUNTA(Sheet2!$A:$A))” ‘动态命名列
(62) Names.Add Name:=“Company”,RefersTo:=“CompanyCar” ‘命名字符串CompanyCar
(63) Names.Add Name:=“Total”,RefersTo:=123456 ‘将数字123456命名为Total。注意数字不能加引号,否则就是命名字符串了。
(64) Names.Add Name:=“MyArray”,RefersTo:=ArrayNum ‘将数组ArrayNum命名为MyArray。
(65) Names.Add Name:=“ProduceNum”,RefersTo:=“=$B$1”,Visible:=False ‘将名称隐藏
(66) ActiveWorkbook.Names(“Com”).Name ‘返回名称字符串

公式与函数
(67) Application.WorksheetFunction.IsNumber(“A1”) ‘使用工作表函数检查A1单元格中的数据是否为数字
(68) Range(“A:A”).Find(Application.WorksheetFunction.Max(Range(“A:A”))).Activate
’激活单元格区域A列中最大值的单元格
(69) Cells(8,8).FormulaArray=“=SUM(R2C[-1]:R[-1]C[-1]*R2C:R[-1]C)” ‘在单元格中输入数组公式。注意必须使用R1C1样式的表达式

图表
(70) ActiveSheet.ChartObjects.Count ‘获取当前工作表中图表的个数
(71) ActiveSheet.ChartObjects(“Chart1”).Select ‘选中当前工作表中图表Chart1
(72) ActiveSheet.ChartObjects(“Chart1”).Activate
ActiveChart.ChartArea.Select ‘选中当前图表区域
(73) WorkSheets(“Sheet1”).ChartObjects(“Chart2”).Chart. _
ChartArea.Interior.ColorIndex=2 ‘更改工作表中图表的图表区的颜色
(74) Sheets(“Chart2”).ChartArea.Interior.ColorIndex=2 ‘更改图表工作表中图表区的颜色
(75) Charts.Add ‘添加新的图表工作表
(76) ActiveChart.SetSourceData Source:=Sheets(“Sheet1”).Range(“A1:D5”), _
PlotBy:=xlColumns ‘指定图表数据源并按列排列
(77) ActiveChart.Location Where:=xlLocationAsNewSheet ‘新图表作为新图表工作表
(78) ActiveChart.PlotArea.Interior.ColorIndex=xlNone ‘将绘图区颜色变为白色
(79) WorkSheets(“Sheet1”).ChartObjects(1).Chart. _
Export FileName:=“C:MyChart.gif”,FilterName:=“GIF” ‘将图表1导出到C盘上并命名为MyChart.gif

窗体
(80) MsgBox “Hello!” ‘消息框中显示消息Hello
(81) Ans=MsgBox(“Continue?”,vbYesNo) ‘在消息框中点击“是”按钮,则Ans值为vbYes;点击“否”按钮,则Ans值为vbNo。
If MsgBox(“Continue?”,vbYesNo)<>vbYes Then Exit Sub ‘返回值不为“是”,则退出
(82) Config=vbYesNo+vbQuestion+vbDefaultButton2 ‘使用常量的组合,赋值组Config变量,并设置第二个按钮为缺省按钮
(83) MsgBox “This is the first line.” & vbNewLine & “Second line.” ‘在消息框中强制换行,可用vbCrLf代替vbNewLine。
(84) MsgBox "the average is :"&Format(Application.WorksheetFunction.Average(Selection),"#,##0.00"),vbInformation, "selection count average" & Chr(13) ‘应用工作表函数返回所选区域的平均值并按指定格式显示
(85) Userform1.Show ‘显示用户窗体
(86) Load Userform1 ‘加载一个用户窗体,但该窗体处于隐藏状态
(87) Userform1.Hide ‘隐藏用户窗体
(88) Unload Userform1 或 Unload Me ‘卸载用户窗体
(89) (图像控件).Picture=LoadPicture(“图像路径”) ‘在用户窗体中显示图形
(90) UserForm1.Show 0 或 UserForm1.Show vbModeless ‘将窗体设置为无模式状态
(91) Me.Height=Int(0.88*ActiveWindow.Height) ‘窗体高度为当前活动窗口高度的0.88
Me.Width=Int(0.88*ActiveWindow.Width) ‘窗体宽度为当前活动窗口高度的0.88
事件
(92) Application.EnableEvents=False ‘禁用所有事件
 Application.EnableEvents=True ‘启用所有事件
注:不适用于用户窗体控件触发的事件

对象
(93) Set ExcelSheet = CreateObject("Excel.Sheet") ‘创建一个Excel工作表对象
ExcelSheet.Application.Visible = True ‘设置 Application 对象使 Excel 可见
ExcelSheet.Application.Cells(1, 1).Value = "Data" ‘在表格的第一个单元中输入文本
ExcelSheet.SaveAs "C:TEST.XLS" ‘将该表格保存到C:test.xls 目录
ExcelSheet.Application.Quit ‘关闭 Excel
Set ExcelSheet = Nothing ‘释放该对象变量
(94) ‘声明并创建一个Excel对象引用
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
(95) ‘创建并传递一个 Excel.Application 对象的引用
Call MySub (CreateObject("Excel.Application"))
(96) Set d = CreateObject(Scripting.Dictionary) ‘创建一个 Dictionary 对象变量
(97) d.Add "a", "Athens" ‘为对象变量添加关键字和条目

其他
(98) Application.OnKey “^I”,”macro” ‘设置Ctrl+I键为macro过程的快捷键
(99) Application.CutCopyMode=False ‘退出剪切/复制模式
(100) Application.Volatile True ‘无论何时工作表中任意单元格重新计算,都会强制计算该函数
Application.Volatile False ‘只有在该函数的一个或多个参数发生改变时,才会重新计算该函数

定制模块行为
(101) Err.Clear ‘清除程序运行过程中所有的错误
*******************************************************
工作簿
(102) ThisWorkbook.BuiltinDocumentProperties(“Last Save Time”)
或Application.Caller.Parent.Parent.BuiltinDocumentProperties(“Last Save Time”) ‘返回上次保存工作簿的日期和时间
(103) ThisWorkbook.BuiltinDocumentProperties("Last Print Date")
或Application.Caller.Parent.Parent.BuiltinDocumentProperties(“Last Print Date”) ‘返回上次打印或预览工作簿的日期和时间
(104) Workbooks.Close ‘关闭所有打开的工作簿
(105) ActiveWorkbook.LinkSources(xlExcelLinks)(1) ‘返回当前工作簿中的第一条链接
(106) ActiveWorkbook.CodeName
ThisWorkbook.CodeName ‘返回工作簿代码的名称
(107) ActiveWorkbook.FileFormat
ThisWorkbook.FileFormat ‘返回当前工作簿文件格式代码
(108) ThisWorkbook.Path
ActiveWorkbook.Path ‘返回当前工作簿的路径(注:若工作簿未保存,则为空)
(109) ThisWorkbook.ReadOnly
ActiveWorkbook.ReadOnly ‘返回当前工作簿的读/写值(为False)
(110) ThisWorkbook.Saved
ActiveWorkbook.Saved ‘返回工作簿的存储值(若已保存则为False)
(111) Application.Visible = False ‘隐藏工作簿
Application.Visible = True ‘显示工作簿
注:可与用

Application.DisplayAlerts = False

在程序执行过程中使出现的警告框不显示

example:

…………
Application.DisplayAlerts = False
Sheet1.Delete
Application.DisplayAlerts = True
…………

mysql常用命令

由于种种原因,最近准备换PHP的系统,研究一下DEDE和DISCUZ,结果发现环境很难搭建,最后找了个EXP,才终于搭建成功。装了个MYSQL,结果发现没有图形化界面,只好BAIDU了一些资料,也为正在准备换PHP的朋友参考一下。

一、连接MySQL。

格式: mysql -h主机地址 -u用户名 -p用户密码

1、例1:连接到本机上的MYSQL。

  首先在打开 DOS 窗口,然后进入目录 mysqlbin,再键入命令mysql -u root -p,回车后提示你输密码,如果刚安装好 MySQL,超级用户 root 是没有密码的,故直接回车即可进入到 MySQL 中了,MySQL 的提示符是:mysql>

2、例2:连接到远程主机上的 MySQL。

  假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h 110.110.110.110 -u root -p abcd123

(注:u与root可以不用加空格,其它也一样)

3、退出 MySQL 命令: quit 或 exit (回车)

二、修改密码。

格式:mysqladmin -u用户名 -p password 新密码

1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令

mysqladmin -u root -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、例2:再将root的密码改为djg345。

mysqladmin -u root -p password djg345

三、增加新用户。

(注意:和上面不同,下面的因为是 MySQL 环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

例1、增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以 root 用户连入 MySQL,然后键入以下命令:

grant select, insert, update, delete on *.* to test1@"%" Identified by "abc";

但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。

例2、增加一个用户test2密码为abc,让他只可以在www.denghaigang.com上登录,并可以对数据库 mydb进行查询、插入、修改、删除的操作(www.denghaigang.com指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

grant select, insert, update,delete on mydb.* to test2@denghaigang.com identified by "abc";

  如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select, insert, update, delete on mydb.* to test2@denghaigang.com identified by "";

  在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。

二、显示命令

1、显示数据库列表。

show databases;

  刚开始时才两个数据库:mysql 和 test。mysql 库很重要它里面有 MySQL 的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示库中的数据表:

use mysql; //打开库,学过 FOXBASE 的一定不会陌生吧

show tables;

3、显示数据表的结构:

describe 表名;

4、建库:

create database 库名;

5、建表:

use 库名;

create table 表名 (字段设定列表);

6、删库和删表:

drop database 库名;

drop table 表名;

7、将表中记录清空:

delete from 表名;

8、显示表中的记录:

select * from 表名;

人真的好孤单

有些话不能跟父母说;

有些话不能跟兄弟姐妹说;

有些话不能跟男性朋友说;

有些话不能跟女性朋友说;

有些话不能跟女朋友说;

有些话不能跟同学说;

有些话不能跟同事说;

———

人真的好孤单

ORACLE数据类型

 字段类型   中文说明   限制条件   其它说明    
  CHAR   固定长度字符串   最大长度2000   bytes          
  VARCHAR2   可变长度的字符串   最大长度4000   bytes     可做索引的最大长度749    
  NCHAR   根据字符集而定的固定长度字符串   最大长度2000   bytes          
  NVARCHAR2   根据字符集而定的可变长度字符串   最大长度4000   bytes          
  DATE   日期(日-月-年)   DD-MM-YY(HH-MI-SS)   经过严格测试,无千虫问题    
  LONG   超长字符串   最大长度2G(231-1)   足够存储大部头著作    
  RAW   固定长度的二进制数据   最大长度2000   bytes     可存放多媒体图象声音等    
  LONG   RAW   可变长度的二进制数据   最大长度2G   同上    
  BLOB   二进制数据   最大长度4G        
  CLOB   字符数据   最大长度4G        
  NCLOB   根据字符集而定的字符数据   最大长度4G        
  BFILE   存放在数据库外的二进制数据   最大长度4G        
  ROWID   数据表中记录的唯一行号   10   bytes   ********.****.****格式,*为0或1    
  NROWID   二进制数据表中记录的唯一行号   最大长度4000   bytes    
  NUMBER(P,S)   数字类型   P为整数位,S为小数位    
  DECIMAL(P,S)   数字类型   P为整数位,S为小数位    
  INTEGER   整数类型   小的整数    
  FLOAT   浮点数类型   NUMBER(38),双精度    
  REAL   实数类型   NUMBER(63),精度更高    

数据类型 参数 描述
char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2(n) n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,
这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。
可做索引的最大长度3209。
number(m,n) m=1 to 38
n=-84 to 127
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
如:number(3,0),输入575.316,真正保存的数据是575。
date 从公元前4712年1月1日到公元4712年12月31日的所有合法日期,
Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
long 可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
long raw 可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
blob
clob
nclob
三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
可以执行读取、存储、写入等特殊操作。
bfile 在数据库外部保存的大型二进制对象文件,最大长度是4GB。
这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
Oracle 8i可以读取、查询BFILE,但是不能写入。
大小由操作系统决定。

数据类型是列或存储过程中的一个属性。

    Oracle支持的数据类型可以分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。

    字符数据类型

     CHAR            char数据类型存储固定长度的字符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度,它的默认长度则设置为1。如果对某个CHAR类型变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充。

     VARCHAR2 存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度,但是这个长度是指对该变量赋值的最大长度而非实际赋值长度。不需用空格