Oracle数据库日期存储为Varchar还是Date?

我工作没多久。。。但近期建数据库的时候和DBA争论了一下,他们一直用的Varchar存储日期。
而我觉得应该用Date类型。原因第一是Date类型占用字节小,Varchar存储日期至少占用十几二十个字节吧,数据量一大差距会很明显。第二是比较的时候Date类型数据库存储的应该是数字吧,可以直接比大小,而Varchar是字符串,得一个个比较,效率低。
DBA认为Varchar类型好的原因是格式固定。

其实我挺不理解的。。。既然Oracle提供了Date来存储日期,为什么非要用Varchar呢?
想问下大家觉得哪类型存储日期好呢?还有其他原因吗?

qq_39197662
喜剧之王八蛋 设计成number类型,存储时间戳感觉好处理
大约一个月之前 回复
qq_31839695
90e家 跟着公司干,还是听公司点建议为好!还有date类型,再sqlserver和oracle中使用区别比较大,调用干嘛要格式化,不然很容易出错,统一成varchar也是个好事。
大约一个月之前 回复

8个回答

  1. 与具体业务(甚至行业)相关。比如监控系统,嵌入式系统,别说字符串,一般都会用数值表示时间(unix时间)。
  2. 与DB设计人的习惯相关。这个习惯从褒义上说是有经验,有最佳实践经历,从贬义来说,故步自封,不思变。
  3. 从存储效率,索引效率看,date(本质是浮点数)优于字符串。
  4. 从异构数据迁移便利性看,字符串优于date,问题是是否有这种迁移的预期和必要性。

应该首推日期相关类型,特别是多语言,跨区域的时候,格式和时区根据登录用户不同需要转化为不同的显示格式。

我觉得是为了方便开发在程序中页面可以直接展示,不用再从日期转成字符,因为涉及数据交换的时候大多数都是字符串格式也就是json字符串
所以把日期设计成字符串格式会更加方便。
楼主考虑了资源节约并没有什么错。但是一般开发都会把日期设计为字符串格式,特殊情况特殊对待吧。

如果考虑不同的数据库间移置,建议采用字符类型。

只是为了方便前台展示,不用将日期转换为字符串。但是这样会造成一个问题,若日期存储的是字符串
当插入的时候不做校验,如‘2020-13-32 25:61:61’这样的数据也是可以存进去的,若是时间类型的话
就不会出现这个问题了。个人还是比较赞同你的观点的,日期格式存日期,没毛病,但是有时也不必去纠结
你所谓的效率和占用问题,这些是可以忽略的。
另一个建议是可以将日期存储为long类型的时间戳,比较起来也很方便,但是就是显示的时候需要处理一下。
希望采纳,谢谢

个人感觉还是字符串类型,操作方便,当需要校验时也可以再加校验呗

可以根据你们应用场景选择,Date类型可以方便使用函数运算、转换数据,如你理解比较或者运算比较多的时候,就采用Date,而使用Varchar正如你们DBA所说格式固定

主要看 你业务需求吧,如果 只是 展示一下,不需要涉及到 时间的 比较,排序,查询的时候 这个时间 不是判断条件的话,用 字符格式 也是可以的,比较方便,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
奇怪的Oracle varchar2 长度问题
最近我写了一个Oracle存储过程如下: create table testt(param varcahr(50), len number, ts date); create or replace procedure testp(p_a varchar) IS BEGIN insert into testt(param,len,ts) values(p_a,length(p_a),sysdate); commit; End; 我在SQL Developer中直接执行这个存储过程 testp('12345') 系统显示长度是5,而 我使用OLEDB.Oracle驱动,使用C#程序执行这个存储过程时,发现同样的调用记录却显示长度为6. 我的系统是Windows 2008, 数据库是 Oracle 11G 11.2.0.1 我运行程序的电脑是Win 7,.Net Framwork4.5 望高手指导一下! 谢谢!
初学者求一个JSP对数据库进行登录并增删改查的代码
A 注:(发送失败的短信的存储表格) create table A ( list_id VARCHAR2(40) not null, task_id VARCHAR2(40), content VARCHAR2(2000), presend_dt DATE, final_dt DATE, status NUMBER default 0, caller VARCHAR2(40), chargenum VARCHAR2(40), callee VARCHAR2(40), attemp_count NUMBER default 0, sms_type NUMBER, code VARCHAR2(20), sys_type NUMBER, sys_id VARCHAR2(40), sms_level NUMBER, gw_status NUMBER(5), fail_type NUMBER(1)(禁发原因)1为黑名单 2为敏感词 ) tablespace BTBASE pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); B 注:黑名单存储表格 create table B ( phone VARCHAR2(20) default 1, id NUMBER ) tablespace BTBASE pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); W 注:关键词存储表格 create table W ( word VARCHAR2(20), id NUMBER ) tablespace BTBASE pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); 可发送短信存储表格 create table L ( list_id VARCHAR2(40) not null, task_id VARCHAR2(40), content VARCHAR2(2000), presend_dt DATE, final_dt DATE, status NUMBER default 0,(发送状态) caller VARCHAR2(40), chargenum VARCHAR2(40), callee VARCHAR2(40),(收件人) attemp_count NUMBER default 0, sms_type NUMBER, code VARCHAR2(20), sys_type NUMBER, sys_id VARCHAR2(40), sms_level NUMBER, gw_status NUMBER(5) ) 账号密码验证表格 creat table N ( id varchar2(40) not null, Usercode varchar2(40), Password varchar2(40), Name varchar2(40), Ip varchar2(40), Total number(10), DayLimit number(40), Status number(4), insertDt date, Memo varchar(80) ) 登录需要验证用户名密码是否在N,在登录成功,不在登录失败 敏感词页功能和黑名单一样 可发送短信只需做出列表和查询功能,查询元素为id、发件人(caller)、短信内容(content)、收件人(callee)、发送状态(status) 不可发现短信只需查询功能,查询元素为id、发件人(caller)、短信内容(content)、收件人(callee)、禁发原因(fail_type) 用Oracle数据库其他框架不限,请带上jar包发送
求救!用oracle11g实现人事管理数据库设计,在循环键盘输入信息时遇到错误!
我现在做用oracle实现人事管理数据库,遇到了很严重的问题,请各位路过的大侠帮帮忙!!! 它的要求和部分代码如下: 我用的是oracle 11g,用cmd进行以下操作,我的用户名已创建(user_name1),被授予了需要用到的权限,创建了3个表空间orcltbs1_1、orcltbs1_2、orcltbs1_3都是(300m的容量)用来完成要求1。 要求: 1、员工表(按出生日期建立分区表)create table emp(empnum varchar2(16) primary key, empname varchar2(16) not null, sex number not null constraint s_ck1 check(sex in(0,1)), birthday date not null, nation varchar2(10) not null,nativeplace varchar2(40) not null,Ident varchar2(16) not null,department varchar2(16) not null, marriage number not null constraint s_ck2 check(marriage in(0,1)),address varchar2(40),policy varchar(10) not null, phone varchar2(16) not null,degree varchar(10) not null,college varchar2(40) not null,duty varchar2(16),title varchar2(16), sort varchar(10) not null,remark varchar2(400)) partition by range(birthday) (partition p1 values less than(to_date('1970-1-1','yyyy-mm-dd'))tablespace orcltbs1_1, partition p2 values less than (to_date('1990-1-1','yyyy-mm-dd'))tablespace orcltbs1_2, partition p3 values less than (maxvalue) tablespace orcltbs1_3); 2、创建一个存储过程p_inputInfo,通过该过程完成员工基本信息的录入; create or replace procedure p_inputInfo( p_empnum emp.empnum%type, p_empname emp.empname%type, p_sex emp.sex%type, p_birthday date, p_nation varchar2,p_nativeplace varchar2,p_Ident varchar2,p_department varchar2,p_marriage number,p_address varchar2,p_policy varchar2,p_phone varchar2,p_degree varchar2,p_college varchar2,p_duty varchar2,p_title varchar2,p_sort varchar2,p_remark varchar2 ) as begin insert into emp values(p_empnum, p_empname, p_sex, p_birthday, p_nation,p_nativeplace,p_Ident,p_department,p_marriage,p_address,p_policy,p_phone,p_degree,p_college,p_duty,p_title,p_sort,p_remark ); end p_inputInfo; 3、创建一个存储过程调用p_inputInfo,利用键盘输入职工信息,能够循环输入,每次输入完,要提示继续吗?输入Y继续下一个职工信息输入,输入其它字母,退出输入。 declare p_panduan varchar2(10); p_empnum emp.empnum%type; p_empname emp.empname%type; p_sex emp.sex%type; p_birthday emp.birthday %type; p_nation emp.nation%type; p_nativeplace emp.nation%type; p_Ident emp.Ident %type; p_department emp.department %type; p_marriage emp.marriage %type; p_address emp.address %type; p_policy emp.policy %type; p_phone emp.phone %type; p_degree emp.degree %type; p_college emp.college %type; p_duty emp.duty %type; p_title emp.title %type; p_sort emp.sort %type; p_remark emp.remark %type; begin loop p_empnum:='&num'; p_empname:='&nam'; p_sex:='&sex'; p_birthday:=&birthda; p_nation:='&natio'; p_nativeplace:='&nativeplac'; p_Ident:='&iden'; p_department:='&dept'; p_marriage:='&marriag'; p_address:='&addres'; p_policy:='&polic'; p_phone:='&phon'; p_degree:='&degre'; p_college:='&colleg'; p_duty:='&dut'; p_title:='&titl';p_sort:='&sor';p_remark:='&remar'; --(第40行) p_inputInfo(p_empnum, p_empname, p_sex, p_birthday, p_nation, p_nativeplace, p_Ident, p_department, p_marriage, p_address, p_policy, p_phone, p_degree, p_college, p_duty, p_title, p_sort, p_remark); dbms_output.put_line('是否继续输入?输入Y继续下一个职工信息输入,输入其它字母,退出输入'); --(第59行) p_panduan:=&panduan; exit when p_panduan != 'y'; end loop; end; 操作结果: 输入员工信息,然后输入n的话,是可以把数据插入emp表;但是!! 输入员工信息,然后输入y的话,出现以下错误:第 1 行出现错误: ORA-00001: 违反唯一约束条件 (user_name1.SYS_C0011485) ORA-06512: 在 "user_name1.P_INPUTINFO", line 10(也就是P_INPUTINFO这个存储过程的as,应该没什么错吧?) ORA-06512: 在 line 41 我试过用系统管理员身份,删除掉SYS_C0011485这个约束条件,但是当输入员工信息,然后输入y后,cmd光标一直不动,同时,相应的表空间的可用容量也会越来越少。比如:我输入以下员工信息:p_empnum:='12345'; p_empname:='isi'; p_sex:=0; p_birthday:=to_date('1979-11-6','yyyy-mm-dd'); p_nation:='han'; p_nativeplace:='gda'; p_Ident:='12345632'; p_department:='ywb'; p_marriage:=0; p_address:='gdaadsz'; p_policy:='qz'; p_phone:='12345'; p_degree:='daxue'; p_college:='zadsadsk'; p_duty:='jl'; p_title:='jl';p_sort:='jl';p_remark:='wu'; 我用dba身份运行:select tablespace_name,sum(bytes) free_spaces from dba_free_space group by tablespace_name; 发现orcltbs1_2的可用容量越来越少,最后cmd出现以下提示: declare * 第1行出现错误: ora-01688:表user_name1.emp分区p2无法通过128(在表空间orcltbs1_2扩展) ora-06512:在“user_name.p_inputinfo”,line 10 ora-06512:在line 41 请问各位,为什么这种情况下表空间会越来越少?是我的代码有什么逻辑错误吗? 还有,我这个系统要求的是能够循环键盘输入员工信息(至少输入2个员工的信息),请问各位,我的第三个要求的代码哪里错了?麻烦帮我指出来、改正!! 这个东西搞了一天了,不搞出来总觉得是前功尽弃,望各位大侠施以援手!!!万分感谢!
关于证券交易日历表,获取上一个交易日的日期
已知:oracle数据有一表:trade_date 存有证券交易的日期日历(字段名tdate,类型为varchar2),只存储交易日(周末、春节、国庆等假日不在此表)。 现有一需求需要做: 判断当前日期是否是交易日? 如果是,则查找上一个交易日的日期;如果否,则不做任何处理。 我目前的思路是,先查找当天日历,如果在交易表中存在,即当天是交易日。 我查找上一交易日时,采取的思路是,在日历表中查找日期小于当前日期的记录且限定记录数为1, select tdate from trade_date where rownum<=1 and tdate<'20130618' order by tdate desc; 大家觉得这样可行吗,或者有没有更好的思路?
帮忙SQLSERVER通过存储写ORACLE语句优化
这个 问题放错大类了 不会移动 现在有这个需求 从sqlserver里查出数据进行简单的出来后 插入oracle表中 我写好的个存储但是运行的时候感觉效率特别慢 谁能帮我把下面的 语句优化下 存储在sqlserver这边 if Exists(select name from sysobjects where name='ZHIJIAN_BANZHENG_INIT' and type='P') drop procedure ZHIJIAN_BANZHENG_INIT go create PROCEDURE ZHIJIAN_BANZHENG_INIT as DECLARE @zch varchar(30), --长度根据实际长度修改 @jgdm varchar(30), @jgmc varchar(250), @jglx varchar(30), @bzrq datetime, @body varchar(500), @date varchar(10), @uid varchar(30) set @date =convert(char(10),getdate(),120) --获得当前日期 declare cursor2 cursor for --定义游标cursor1 select zch,jgdm,jgmc,jglx,bzrq from jgdm where jglx='1' --使用游标的对象(跟据需要填入select语句) open cursor2 -- fetch cursor2 --into @name,@party_id --打开游标 WHILE 1=1 --判断是否成功获取数据 begin fetch next from cursor2 into @zch,@jgdm,@jgmc,@jglx,@bzrq --将游标向下移1行 if(@@FETCH_STATUS =-1) break SET @uid=CAST(CAST(NEWID() as nvarchar(36)) + CAST(GETDATE() as varchar(3)) as varchar(30)) set @body='{"QYZCH":'+@zch+ --封装为JSON格式 '","ZZJGDM":"'+@jgdm+ '","JGMC":'+@jgmc+ '","JGZCLX":"'+@jglx+ '","BZRQ":"'+CONVERT (varchar(8),@bzrq,112) +'"}' --print(@body) insert into [127.0.0.1]..[JXWFRONT].[DATA_TEMP_REPORT] values(@uid,'zhijian_banzheng',@body,'1',@date) --插入oracle数据库 如何优化 end close cursor2 --关闭游标 deallocate cursor2
为后台执行加载数据 可以加载到临时表 却不能加载到表区间(调用存储过程)
CREATE OR REPLACE PROCEDURE PRC_DET_01026_DAY ( IN_DAY IN NUMBER, --统计日期yyyymmdd ON_RtnCode OUT NUMBER, --返回值,正确为0,错误为ORACLE的错误代码 ON_RtnMsg OUT VARCHAR2 --返回信息,正确为'NO ERROR',否则为ORACLE的出错信息 ) AS -----程序固定变量,不要修改--------------------------- vn_RtnCode NUMBER(8) :=0; --程序返回代码,正确为0,错误为ORACLE的错误代码 vv_RtnMsg VARCHAR2(600) := 'NO ERROR'; --程序返回信息,正确为'NO ERROR',否则为ORACLE的出错信息 vd_BegDate DATE := SYSDATE; --程序起始时间 vd_EndDate DATE; --程序结束时间 vn_Step NUMBER(4) := 0; --运行步骤(如果程序较长,可以根据实际情况对此变量做增量,出错时根据此变量当前值比较容易分析,运行到最后赋值为-1,标识正常退出) vn_batchid NUMBER; --处理批次号 vn_mdutype NUMBER := 100; --模块类型,100: 数据库存储过程 vn_statdate NUMBER(8); --处理日期参数 vn_statcity NUMBER(8); --处理地市参数 vv_statother VARCHAR2(600); --其它参数信息 vn_ninfo NUMBER(10); --其它返回数字信息 vv_vinfo VARCHAR2(800); --其它返回字符信息 vv_PrcName VARCHAR2(30) := UPPER('PRC_DET_01026_DAY'); --存储过程名称 vn_partflag NUMBER(1); --分区标志 --------------------------------------------------------------------------- var_day NUMBER(2); --日期参数 var_partno VARCHAR2(10); --分区参数 var_delpartno VARCHAR2(10); --需要删除的分区参数 var_addpartno VARCHAR2(10); --需要新增的分区参数 var_month NUMBER(2); --月份参数 var_delday VARCHAR2(6); --需要删除分区日期 var_count NUMBER(5); --计数器 var_tdate NUMBER(6); --动态表参数 var_info VARCHAR2(1000); --错误信息 BEGIN vn_Step:=1; --******此部分根据需要修改,如果没有值,则赋值为NULL;******--- vn_statdate := IN_DAY; --获取处理日期参数 vv_statother := NULL; --获取其它参数信息 --********************************************************--- var_tdate:=SUBSTR(IN_DAY,1,6); --截取动态表参数 var_partno := 'P'||IN_DAY; --计算表分区参数 --var_delday := TO_CHAR(ADD_MONTHS( TO_DATE(IN_DAY,'YYYYMMDD'), -12 ),'YYYYMM'); --计算12个月以前的时间 var_delday := TO_CHAR(TO_DATE(IN_DAY,'YYYYMMDD') - 2,'YYYYMMDD'); --计算2以前的时间 var_delpartno := 'P'||var_delday; --计算需要添加的分区参数 var_count:=0; --初始化计数器 vn_Step:=2; FOR CUR_P IN (SELECT PARTITION_NAME FROM ALL_TAB_PARTITIONS WHERE TABLE_NAME='RELATION_USER' AND PARTITION_NAME LIKE '%'||var_delday||'%') LOOP EXECUTE IMMEDIATE 'ALTER TABLE RELATION_USER DROP PARTITION '||CUR_P.PARTITION_NAME; END LOOP; vn_Step:=3; SELECT COUNT(*) INTO vn_partflag FROM ALL_TAB_PARTITIONS WHERE TABLE_NAME='RELATION_USER' AND PARTITION_NAME=var_partno; IF vn_partflag=0 THEN EXECUTE IMMEDIATE 'ALTER TABLE RELATION_USER ADD PARTITION '||var_partno||' VALUES( '||IN_DAY||' ) TABLESPACE TBS_TOTAL'; ELSE EXECUTE IMMEDIATE 'ALTER TABLE RELATION_USER TRUNCATE PARTITION '||var_partno; END IF; vn_Step:=4; INSERT INTO RELATION_USER SELECT IN_DAY,a.* FROM TMP_01026 a ; COMMIT; ---*************************************--- --******此部分根据需要修改,如果没有值,则赋值为NULL;******--- --******如:如果没有地市参数,则vn_statcity := NULL; ******--- vn_ninfo := NULL; --获取其它返回数字信息 vv_vinfo := NULL; --获取其它返回字符信息 --********************************************************--- vn_Step := -1; --赋值为负1,标识正常退出 --返回信息设置 --程序结束时间 vd_EndDate := SYSDATE; EXCEPTION WHEN OTHERS THEN vn_RtnCode := SQLCODE; vv_RtnMsg := SUBSTR(SQLERRM, 1, 600); ROLLBACK; ON_RtnCode := vn_RtnCode; ON_RtnMsg := vv_RtnMsg; vd_EndDate := SYSDATE; DBMS_OUTPUT.PUT_LINE( 'INDEX: '||vn_Step||' ERR_CODE: '||vv_RtnMsg ); END; 求大神帮忙看下问题出在哪?为什么不能自动调用存储过程
oracle job
困扰了很长一段时间了. 需要总是不太明确 开始我的建议是每个星期天凌晨1 点 跑, 领导觉得时间太短了.政府机关效低,没必要这么快,就一直搁着 [code="sql"]SET SERVEROUTPUT ON; DECLARE job_num BINARY_INTEGER; proc VARCHAR2(32); v_begin DATE; v_interval VARCHAR2(64); BEGIN proc := 'opera_rake;'; v_begin := trunc(sysdate) + 23 / 24; v_interval := 'trunc(next_day(sysdate,''星期日'')) + 1 / 24'; DBMS_JOB.SUBMIT(job_num, proc, v_begin, v_interval); DBMS_OUTPUT.PUT_LINE('job(任务) 编号: ' || job_num); COMMIT; END; /[/code] 我怕需求会再变,于是在系统的代码表中添加了一个字段.让管理员来操作 [code="sql"]DECLARE job_num BINARY_INTEGER; proc VARCHAR2(32); v_begin DATE; v_interval VARCHAR2(64); temp NUMBER; BEGIN -- 如果没有设定此值,则 默认为 每周日凌晨 1 点统计 SELECT DD_VALUE INTO temp FROM DICTIONARY WHERE DD_ID = 'commission_statis'; if temp is null then v_interval := 'trunc(next_day(sysdate,''星期日'')) + 1 / 24'; else v_interval := 'trunc(sysdate) + ' || temp || ' + 1 / 24'; end if; proc := 'opera_rake;'; v_begin := trunc(sysdate) + 23 / 24; DBMS_JOB.SUBMIT(job_num, proc, v_begin, v_interval); DBMS_OUTPUT.PUT_LINE('job(任务) 编号: ' || job_num); COMMIT; END; /[/code] 当然,这样会要求数据库字典表中必须要有一条记录为 'commission_statis'. 现在抛开 动态 SQL 不谈.整个系统都成了这样. 现在领导给了新需求, 要求定时执行一个存储过程, 时间是每旬跑一次, [color=red]即 每个月的 1 号, 11 号, 21 号 跑[/color] [color=red]v_interval 的值如何确定[/color], 实在是想不到好的解决方案. 希望各位给个建议 实在是没分了... [b]问题补充:[/b] 哈哈. max_annie 的回复有意思
oracle 无效的列索引
数据库连接类 public class Conn { public Statement astmt = null; public PreparedStatement stmt = null; public CallableStatement cstmt = null; public ResultSet rs = null; private Connection con = null; // public static String context = null; public Conn() { try { // JndiSource ds = new JndiSource(); Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; con = con = DriverManager.getConnection(url, "jxhx", "jxhx"); // con = ds.getDataSource(); con.setAutoCommit(false); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public void getAStatement() throws SQLException { astmt = con.createStatement(); } // 一般调用 public void setStatement(String statment) throws SQLException { stmt = con.prepareStatement(statment); } // 大数据量调用(不可滚动的结果集) public void setRStatement(String statment) throws SQLException { stmt = con.prepareStatement(statment, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); } // 大数据量调用(可滚动的结果集) public void setNRStatement(String statment) throws SQLException { stmt = con.prepareStatement(statment, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); } // 调用存储过程 public void setCStatement(String cstatment) throws SQLException { cstmt = con.prepareCall(cstatment); } // 关闭数据库连接 public void close() throws SQLException { if (this.rs != null) try { this.rs.close(); this.rs = null; } catch (Exception e) { } if (this.stmt != null) try { this.stmt.close(); this.stmt = null; } catch (Exception e) { } if (this.cstmt != null) try { this.cstmt.close(); this.cstmt = null; } catch (Exception e) { } if (this.astmt != null) try { this.astmt.close(); this.astmt = null; } catch (Exception e) { } if (this.con != null) try { this.con.close(); this.con = null; } catch (Exception e) { } System.out.println("com_boco_db_DataAccess_close_Done!"); } public void rollBack() throws SQLException { con.rollback(); } public void commit() throws SQLException { con.commit(); } public Connection getConnection() { return con; } public int getRecordCount(String SQL) throws SQLException { int retValue = 0; try { this.setRStatement(SQL); this.rs = this.stmt.executeQuery(); while (this.rs.next()) { retValue = this.rs.getInt(1); } } catch (Exception ex) { ex.printStackTrace(); } finally { return retValue; } } } public class PstnService { private Conn databassconn; private InputStream in; private PstnInfo pin; public PstnService(File file) { databassconn = new Conn(); try { pin = new PstnInfo(file); in = new FileInputStream(file); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JXLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 业务类 public int insertPartition_1() throws Exception { int k = 0; int PARTITION_1 = 0; List list = pin.setPstnDTO(); // for (int i = 0; i < list.size(); i++) { PstnDTO pd = (PstnDTO) list.get(0); String sql = "select count(PARTITION_1) from Tel_res_partition_1 where PARTITION_1_NAME=?"; try { databassconn.setStatement(sql); databassconn.stmt.setString(1, pd.getPSTN_NAME()); databassconn.rs = databassconn.stmt.executeQuery(); while (databassconn.rs.next()) { System.out.println(databassconn.rs.getInt(1)); if (databassconn.rs.getInt(1) != 0) { String sql2 = "update TEL_RES_PARTITION_1 set PARTITION_1_NAME=?,VER_NUMBER=?,INSERT_TIME=systdate,INSERT_FLAG=?,USERNAME=?" + " where PARTITION_1=?"; databassconn.setStatement(sql2); System.out.print(sql2); databassconn.stmt.setString(1, pd.getPSTN_NAME()); databassconn.stmt.setInt(2, 0); databassconn.stmt.setInt(3, 0); databassconn.stmt.setString(4, null); databassconn.stmt.setInt(5, getid()); databassconn.stmt.executeUpdate(); databassconn.commit(); k = 1; } else { String sql1 = "INSERT INTO TEL_RES_PARTITION_1(PARTITION_1,PARTITION_1_NAME,VER_NUMBER,INSERT_TIME,INSERT_FLAG,USERNAME )" + "VALUES(?,?,?,systdate,?,?)"; databassconn.setStatement(sql1); databassconn.stmt.setInt(1, getid()); System.out.println(pd.getPSTN_NAME()); [color=blue][b]databassconn.stmt.setString(2, pd.getPSTN_NAME());[/b][/color] databassconn.stmt.setInt(3, 0); databassconn.stmt.setInt(4, 0); databassconn.stmt.setString(5, null); k = databassconn.stmt.executeUpdate(); databassconn.commit(); System.out.println("" + k); k = 1; } } databassconn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return k; } 每次执行都会出现 0 顺德本地交换局 java.sql.SQLException: 无效的列索引 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227) at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:4596) at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:4559) at com.dbconn.service.PstnService.insertPartition_1(PstnService.java:160) at com.dbconn.Testconn.main(Testconn.java:24)0 我的表结构是 PARTITION_1为主键,无索引。 PstnService.java:160蓝色部分 指点下 感激不尽,程序没有错误,就是在插入时这个错误 我用的是Oracle 10g ; 我的MSN和邮箱: wangbaoping@boco.com.cn [b]问题补充:[/b] 我的SQL语句没有问题,我在SQLplus上可以执行的 这个是表结构 字段标识 类型属性 功能简述 PARTITION_1 NUMBER(9) 区1 PARTITION_1_NAME VARCHAR2(50) 区1名称 VER_NUMBER NUMBER(9) vernumber INSERT_TIME DATE 倒入时间 INSERT_FLAG NUMBER(6) 倒入标志'o'预提交 '1'实提交 USERNAME VARCHAR2(30) 工号
存储过程for in loop 问题
create or replace procedure GET_DATA is yesterday varchar2(2); tablename varchar2(20); date varchar(20); begin select to_char(sysdate - 1, 'dd') into yesterday from dual; tablename := '"d_his_fre_data_' || yesterday || '"'; dbms_output.put_line(tablename); for rec in(select * from [color=red]tablename[/color]) loop -- insert into aaa values(rec.UID); date := substr(rec.COLL_TIME,0,9); -- dbms_output.put_line(substr(rec.COLL_TIME,0,9) || ' ' substr(rec.COLL_TIME,10,17,)); dbms_output.put_line(date); end loop; commit; end GET_DATA; for in loop中的table 貌似不能为变量啊 请教各位大仙如何解决,分比较少,见谅
关于oracle触发器操作的疑问
<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p> 首先说明我要实现的功能:假设A表和B表,我想实现,在增加A表的同时,利用刚刚插入的数据和A表中已有的数据(包括刚刚插入的数据)进行如数据编码(code)组合,生成一个新的字符串插入到B表中的编码列;</p> <p>我使用的Oracle客户端是PL/SQL devloper 8,</p> <p>我现在想到的方案:</p> <p>方案1:使用行触发器,在插入的时候使用new获取刚刚插入的数据,这样跟之前已经有的数据组合,但是这样当插入两条或多条的时候,会出现下一条总是无法和刚刚插入的数据组合,也就是不能发现同一批插入的数据;(按道理,两个SQL语句应该是两个事务,应该能使用刚刚插入的数据,这是第一个疑问,是不是客户端造成的,我的客户端设置是自动提交SQL,不应该有问题)</p> <p>方案2:在第一种方案不能满足需求,我寻求了第二种方案,就是建立一个全局临时表,然后使用行触发器把新插入的数据放到临时表中,再最后做一次语句触发器,在语句级触发器中使用游标遍历临时表记录,跟已经存在的数据进行组合,插入到B表中;(疑问2:在插入多条数据的时候,比如两个insert语句,行触发器在临时表新增一条数据,然后触发了一次语句级触发器,然后行触发器在临时表又新增一条数据,然后又触发了一次语句级触发器,跟我预想的应该是两次行触发器,一次最终语句级触发不一样,不知道是不是我理解的不对;按照我的理解,两个insert语句应该是两个事务,这样临时表只会保留一条记录,但是目前确实是多条;如果两条insert在一个事务内,为什么又多次触发语句级触发器?);目前解决方法就是在语句触发器最后增加一条删除临时表数据,这样保证临时表始终是最新插入的数据。代码如下:</p> <p> </p> <pre name="code" class="sql"> CREATE TABLE A   ( id number, name varchar2(30), birthdate date   ) ;</pre> <p> </p> <pre name="code" class="java">-- B表 CREATE TABLE B   ( id number, name varchar2(30), birthdate date   ) ;</pre> <p> </p> <pre name="code" class="java">-- 创建临时表 a_tt,存储刚刚插入的数据 CREATE global temporary TABLE a_tt   (id number, name varchar2(30), birthdate date   ) ON COMMIT DELETE ROWS;</pre> <pre name="code" class="java"> --A表的行触发器记录新插入的数据 create or replace trigger a_insert_row AFTER insert on A for each row declare begin insert into <span style="font-size: 1em; line-height: 1.5;">a_tt</span><span style="font-size: 1em; line-height: 1.5;">(id,name,birthdate) values(:new.id,:new.name,:new.birthdate);</span> end; </pre> <p> </p> <pre name="code" class="java"> create or replace trigger aaaa_insert_tt AFTER insert on A declare v_name aaaa_log.name%type; cursor n_cur is select name from <span style="font-size: 1em; line-height: 1.5;">a_tt</span><span style="font-size: 1em; line-height: 1.5;">;</span> begin dbms_output.put_line('语句触发器执行'); for cur in n_cur loop dbms_output.put_line( cur.name); insert into B(name) select cur.name ||'_' ||name from A; end loop; -- delete from <span style="font-size: 1em; line-height: 1.5;">a_tt</span><span style="font-size: 1em; line-height: 1.5;">; --删除临时表过时数据 </span> end;</pre> <p> 测试语句:</p> <p> insert  into A  values(2,'a',sysdate);         </p> <p>insert  into A values(3,'b',sysdate);</p> <p> </p> <p>预期结果:B表中name 列 2_2,3_2,3_3</p> <p> </p> <p>希望各位大神,帮我理理思路,不知道我说清没有</p> <p>触发器执行的时候是不是在行触发器(after)之后提交数据,在语句级触发器就可以使用提交后的数据</p> <p> </p> </div>
ibatis调用存储过程入参问题
<p style="" align="left"><span lang="EN-US" style=""><span style="color: #000000;">CREATE OR REPLACE TYPE EMP_SALARY_REC AS OBJECT (<br> EMP_ID NUMBER(5),<br> EMP_NAME VARCHAR2(255),<br> START_DATE DATE,<br> SALARY NUMBER <br>);<br>/<br><br>CREATE OR REPLACE Type EMP_SALARY_TAB AS TABLE OF EMP_SALARY_REC;<br>/<br><br>next we will create a small package with one single test procedure<br><br>CREATE OR REPLACE PACKAGE EMP_SALARY_PKG IS<br> PROCEDURE GET_EMP_SALARIES(i_array IN EMP_SALARY_TAB,o_array OUT<br>EMP_SALARY_TAB);<br>End EMP_SALARY_PKG;<br>/<br></span><br>用ibatis就不能配置调用吗?</span></p><br/><strong>问题补充</strong><br/><div class="quote_title">niwenbin 写道</div><div class="quote_div">SQL Map通过&lt;procedure&gt;元素支持存储过程。下面的例子说明如何使用具有输出参数的存储过程。 <br />&lt;parameterMap id="swapParameters" class="map" &gt; <br />&lt;parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/&gt; <br />&lt;parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/&gt; <br />&lt;/parameterMap&gt; <br />&lt;procedure id="swapEmailAddresses" parameterMap="swapParameters" &gt; <br />{call swap_email_address (?, ?)} <br />&lt;/procedure&gt; <br />调用上面的存储过程将同时互换两个字段(数据库表)和参数对象(Map)中的两个email <br />地址。如果参数的mode属性设为INOUT或OUT,则参数对象的值被修改。否则保持不变。</div> <br /> <br /> <br />参数是自定义的type类型(EMP_SALARY_TAB): <br />CREATE OR REPLACE TYPE EMP_SALARY_REC AS OBJECT ( <br />EMP_ID NUMBER(5), <br />EMP_NAME VARCHAR2(255), <br />START_DATE DATE, <br />SALARY NUMBER <br />); <br />CREATE OR REPLACE Type EMP_SALARY_TAB AS TABLE OF EMP_SALARY_REC; <br /><br/><strong>问题补充</strong><br/><div class="quote_title">threejin520 写道</div><div class="quote_div">Ibatis访问存储过程的配置 zz&nbsp; 2009-10-30 16:35:48|&nbsp; 分类: Java |&nbsp; 标签: |字号大 <br />中 <br />小 订阅 <br /> <br />最近项目里经常需要配置用Ibatis访问存储过程(或函数),多次摸索,发现配置的难点是在于如何配置输入输出参数。现以访问Oracle的存储过程(或函数)举例说明。 <br /> <br />一般基本的配置要点如下: <br /> <br />(1)、访问存储过程(或函数)一般以procedure标签来定义statement。 <br /> <br />(2)、输入输出的参数需要用parameterMap标签单独定义。 <br /> <br />(3)、区分输入输出参数用parameter标签的mode属性来定义,分别为”OUT”和”IN”。 <br /> <br />按照是否有返回值,是否使用游标分类说明如下: <br /> <br />第一类,没有返回结果,有输出参数以out标识的过程访问配置样式: <br /> <br />&lt;parameterMap id=”functionPramsMap” class=”map”&gt; <br /> <br />&lt;parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p3″ jdbcType=”INTEGER” javaType=”int” mode=”OUT” /&gt; <br /> <br />&lt;/parameterMap&gt; <br /> <br />&lt;procedure id=”statementId” parameterMap=”functionPramsMap”&gt; <br /> <br />{call packageName.functionName(?,?,?)} <br /> <br />&lt;/procedure&gt; <br /> <br />第二类,有返回结果,有输出参数以out标识的过程访问配置样式: <br /> <br />&lt;parameterMap id=”functionParamsMap” class=”map”&gt; <br /> <br />&lt;parameter property=”p0″ jdbcType=” INTEGER” javaType=”string” mode=”OUT”/&gt; <br /> <br />&lt;parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p3″ jdbcType=”INTEGER” javaType=”int” mode=”OUT” /&gt; <br /> <br />&lt;/parameterMap&gt; <br /> <br />&lt;procedure id=”statementId” parameterMap=” functionParamsMap”&gt; <br /> <br />{?=call packageName.functionName(?,?,?)} <br /> <br />&lt;/procedure&gt; <br /> <br />这里参数p0标识调用过程的返回结果。 <br /> <br />第三类,有使用游标的的过程访问配置样式: <br /> <br />&lt;resultMap id=”resultMap” class=”package.ClassA”&gt; <br /> <br />&lt;result property=”property0″ column=”field0″ /&gt; <br /> <br />&lt;result property=”property1″ column=”field2″ /&gt; <br /> <br />&lt;result property=”property2″ column=”field3″ /&gt; <br /> <br />&lt;/resultMap&gt; <br /> <br />&lt;parameterMap id=”functionParamsMap” class=”map”&gt; <br /> <br />&lt;parameter property=”p0″ jdbcType=” INTEGER” javaType=”string” mode=”OUT”/&gt; <br /> <br />&lt;parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/&gt; <br /> <br />&lt;parameter property=”p3″ jdbcType=”ORACLECURSOR” <br /> <br />javaType=”java.sql.ResultSet” mode=”OUT” resultMap=”resultMap” /&gt; <br /> <br />&lt;/parameterMap&gt; <br /> <br />&lt;procedure id=”statementId” parameterMap=”functionPramsMap”&gt; <br /> <br />{?=call packageName.functionName(?,?,?)} <br /> <br />&lt;/procedure&gt; <br /> <br />这里,关键注意的是p3参数,由于使用的是oracle数据库驱动,所以用jdbcType=”ORACLECURSOR”表示oracle游标,同时由于是游标,所以javaType=”java.sql.ResultSet”。最后必须要给参数p3配置好resultMap属性,以说明游标返回的结果集映射方式,不配置此属性,在代码里来访问结果集是不行的。此时,在Java代码里调用的样式如下: <br /> <br />HashMap&lt;String, Object&gt; params = new HashMap&lt;String, Object&gt;(); <br /> <br />params.put(”p1″, p1); <br /> <br />params.put(”p2″, p2); <br /> <br />sqlMapClient.queryForObject(”statementId”, params); <br /> <br />List&lt;ClassA&gt; list = (List&lt;ClassA&gt;) params.get(”p3″); <br /> <br />if (list != null &amp;&amp; list.size() &gt; 0) { <br /> <br />return userList.get(0); <br /> <br />} <br /> <br />return null; <br /> <br />第四类,有复杂的参数类型的存储过程: <br /> <br />(1)、对于BLOB或者CLOB,在POJO里的属性都定义为byte[]类型,iBatis配置里跟普通类型参数一样处理; <br /> <br />(2)、实现TypeHandler来自定义类型处理器用户处理复杂的字段; <br /> <br />(3)、对于数据库自定义的数据类型,首先要定义实现了java.sql.SQLData的类Class TypeA。实现getSQLTypeName方法,返回值为数据库的自定义类型名。配置文件里parameter标签的属性如:jdbcType=”TypeB” JavaType=”TypeA”,同时还要写TypeHandlerCallback用于处理jdbcType=”TypeB”的类型。 <br /></div> <br />我现在需要第四类的例子,如何构建ARRAY
sql优化
我的项目需要求列表某字段和如: select sum(a.se) from sb_zxss a where ....... 其中se是索引字段,后面条件也有缩影字段, 如果是 select a.se from sb_zxss a where ....... 速度会很快!但是一加上sum()函数就会很慢!, 网上说是索引字段用函数会全表搜索,但我并非是后面的条件啊!为什么这么慢? 望大侠们给个解决方法!! [b]问题补充:[/b] [code="java"] procedure get_increment(organ_code varchar2,date_str varchar2,total out number)is begin select sum(b.se) into total from (SELECT a.* FROM sb_zsxx a WHERE a.nsr_swjg_dm like organ_code||'%' ----5XJP<6K0Nq;z9X and a.zsxm_dm = '01' -----7VK0VV AND to_char(a.rkrq, 'yyyymm') = date_str ----M3<FTB7] AND a.rkskbz = 'Y' and a.sksx_dm='11'---R;0cIj1( and a.pz_zl_dm <> '00102' --L^3};cW\=I?nJi AND a.yskm_dm not in ('101020202',-- =x?Z3IF7SMO{7QK0 '010201',-- =x?Z;uNoTvV5K0 '101010201',-- =x?Z;uNoTvV5K0 '010220',-- =x?Z;uNoTvV5K0K0?nVMDI=p!"7#?nJUHk '101010220',-- =x?Z;uNoTvV5K0K0?nVMDI=p!"7#?nJUHk '101020209',-- =x?ZFdK{O{7QF7O{7QK0 '020201',-- =x?ZO{7QF7O{7QK0 '101020201',--- =x?ZO{7QF7O{7QK0 '020220',-- =x?ZO{7QF7O{7QK0K0?nVMDI=p!"7#?nJUHk '101020220',-- =x?ZO{7QF7O{7QK0K0?nVMDI=p!"7#?nJUHk '010202',-- LX6(GxSr=x?ZWTSCNoWJTvV5K0 '101010202',--- LX6(GxSr=x?ZWTSCNoWJTvV5K0 '020301',-- 3v?Z;uNoMKO{7QK0 '010301',-- 3v?Z;uNoMKTvV5K0 '101010301',-- 3v?Z;uNoMKTvV5K0 '1010203',-- 3v?ZO{7QF7MKO{7QK0 '020300',-- 3v?ZO{7QF7MKO{7QK0 '020302',-- 9i;93v?Z;uNoO{7QK0MKK0G7?n '010303')-- 9i;93v?Z;uNoTvV5K0MKK0G7?n union all----?;cW\=I?nJi;9T-MjK0V$ select a.* from sb_zsxx a, (select distinct jkpzxh from sb_zsxx where rkskbz = 'Y' and pz_zl_dm = '00102' ) b where a.nsr_swjg_dm like organ_code||'%' ---?-K0Nq;z9X and a.zsxm_dm = '01' -----7VK0VV and a.sksx_dm='11'---?R;0cIj1( and to_char(a.rkrq, 'yyyymm') = date_str ----M3<FTB7] and a.hzjksh = b.jkpzxh) b; end; [/code] [b]问题补充:[/b] 用的是oracle数据库,也是一个存储过程。 后面的乱码注释不用看了,条件还是大部分都有索引的。 [b]问题补充:[/b] 表中好像有一千多万记录,那个to_char(a.rkrq, 'yyyymm') = date_str 改成a.rkrq>=to_data(date_str||'01','yyyymmdd') and a.rkrq<add_months(to_data(date_str||'01','yyyymmdd'),1) 后速度没什么提升,反而 union all----?;cW\=I?nJi;9T-MjK0V$ select a.* from sb_zsxx a, (select distinct jkpzxh from sb_zsxx where rkskbz = 'Y' and pz_zl_dm = '00102' ) b where a.nsr_swjg_dm like organ_code||'%' ---?-K0Nq;z9X and a.zsxm_dm = '01' -----7VK0VV and a.sksx_dm='11'---?R;0cIj1( and to_char(a.rkrq, 'yyyymm') = date_str ----M3<FTB7] and a.hzjksh = b.jkpzxh 改成 select a.* from sb_zsxx a where a.rkrq>=to_data(date_str||'01','yyyymmdd') and a.rkrq<add_months(to_data(date_str||'01','yyyymmdd'),1) and a.nsr_swjg_dm like organ_code||'%' ---?-K0Nq;z9X and a.zsxm_dm = '01' -----7VK0VV and a.sksx_dm='11'---?R;0cIj1( and exists( select distinct jkpzxh from sb_zsxx b where b.rkskbz = 'Y' and b.pz_zl_dm = '00102' and a.hzjksh = b.jkpzxh ) 后速度有所提升,但总体还是慢, 好像就是那个sum()惹的祸,不知道该咋办? [b]问题补充:[/b] 咋的没人回答啦!难道我得把需要的整年的数据放到临时表里再取吗
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
进程通信方式总结与盘点
​ 进程通信是指进程之间的信息交换。这里需要和进程同步做一下区分,进程同步控制多个进程按一定顺序执行,进程通信是一种手段,而进程同步是目标。从某方面来讲,进程通信可以解决进程同步问题。 ​ 首先回顾下我们前面博文中讲到的信号量机制,为了实现进程的互斥与同步,需要在进程间交换一定的信息,因此信号量机制也可以被归为进程通信的一种方式,但是也被称为低级进程通信,主要原因为: 效率低:一次只可操作少量的...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
听说了吗?阿里双11作战室竟1根网线都没有
双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此。 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“一地狼藉”;到如今媲美5G的wifi网速,到现场却看不到一根网线;从当年使用商用AP(无线路由器),让光明顶双11当天断网一分钟,到全部使用阿里自研AP……阿里巴巴企业智能事业部工程师们提供的基础保障...
在阿里,40岁的奋斗姿势
在阿里,40岁的奋斗姿势 在阿里,什么样的年纪可以称为老呢?35岁? 在云网络,有这样一群人,他们的平均年龄接近40,却刚刚开辟职业生涯的第二战场。 他们的奋斗姿势是什么样的呢? 洛神赋 “翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。” 爱洛神,爱阿里云 2018年,阿里云网络产品部门启动洛神2.0升...
关于研发效能提升的思考
研发效能提升是最近比较热门的一个话题,本人根据这几年的工作心得,做了一些思考总结,由于个人深度有限,暂且抛转引入。 三要素 任何生产力的提升都离不开这三个因素:人、流程和工具,少了其中任何一个因素都无法实现。 人,即思想,也就是古人说的“道”,道不同不相为谋,是制高点,也是高层建筑的基石。 流程,即方法,也是古人说的“法”。研发效能的提升,也就是要提高投入产出比,既要增加产出,也要减...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
入职阿里5年,他如何破解“技术债”?
简介: 作者 | 都铎 作为一名技术人,你常常会听到这样的话: “先快速上线” “没时间改” “再缓一缓吧” “以后再解决” “先用临时方案处理” …… 当你埋下的坑越来越多,不知道哪天哪位同学就会踩上一颗雷。特别赞同“人最大的恐惧就是未知,当技术债可说不可见的时候,才是最让人不想解决的时候。” 作为一个程序员,我们反对复制粘贴,但是我们经常会见到相似的代码,相同的二方包,甚至整个代码...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
深度学习入门笔记(十八):卷积神经网络(一)
欢迎关注WX公众号:【程序员管小亮】 专栏——深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
你也能看懂的:蒙特卡罗方法
蒙特卡罗方法,也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法 蒙特卡罗方法可以粗略地分成两类:一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
JAVA后端面试《Spring》
Spring1.Spring是什么?有什么好处?2.IOC是什么?有什么好处?具体过程?3.DI是什么?4.IOC和DI的关系?5.bean标签的属性有哪些?6.IOC创建对象有哪几种方式?7.Spring是如何实现IOC的?也就是如何创建对象的? 1.Spring是什么?有什么好处? 概念: SPring是一个支持控制反转(IOC)和面向切面编程(AOP)的容器框架。 好处: 两降低&gt;&...
AI 医生“战疫”在前线
作者| Just出品|CSDN(CSDNnews)紧急驰援疫区,AI医生也出动了。截止到2月6日,随着新冠病毒肺炎疫情的不断发展,全国累计已有31161例确诊病例,26359例疑...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
用Python爬取新型冠状病毒肺炎实时数据,pyecharts v1.x绘制省市区疫情地图
文章目录运行结果(2020-2-8数据)基本方案数据格式全国疫情地图实现福建省疫情地图实现福州市疫情地图实现其他 运行结果(2020-2-8数据) 基本方案 web请求用requests 网页内容解析用pyquery、beautifulsoup和正则表达式 地图用pyecharts v1.6.2 数据来源 全国数据来源于腾讯实时疫情动态,直接get到json 福州市数据来源于福建省疾病预...
MySQL基础笔记
如有错误,恳请告知。非常感谢! 环境(相关下载、配置): phpstudy7.0.9 Apache2.4.39 MySQL5.7.26 phpMyAdmin4.8.5 此文在Windows10下实验并且假设以上环境均准备好。 如何打开安装好的MySQL命令行? 如下图所示。打开phpstudy的安装目录,打开Extensions目录,打开MySQL5.7.26文件,打开bin文件,在上方的路径...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问