Oracle数据库create or replace

Oracle数据库中create or replace type body xxx is是干什么用的

3个回答

create type 自定义表类型A as table of 自定义Object类型A create or replace是用于自定义类型的 ,不能一起使用

FiangAsDre
GreenRookie 回复sinat_32761739: 看看oracle 存储过程的基本语法 的相关资料
3 年多之前 回复
sinat_32761739
sinat_32761739 他写这个具体有什么用啊,主要是我们以前都是增删改查,接触这个东西也少,希望能讲的具体一点有什么用,
3 年多之前 回复

两个不可以直接使用的,http://www.2cto.com/database/201208/150876.html

create or replace 表示在创建视图时,如果已存在同名的视图,则重新创建,
如果只用create 创建,则需将原有的视图删除后才能创建.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle数据库表内数据设置 菜鸟跪求
![图片说明](https://img-ask.csdn.net/upload/201905/31/1559314072_194210.png) 在oracle数据库内想将车位这一列设置位“A1”,以后不管加几个车牌号,车位都是A1 希望帮帮忙,很急 ``` CREATE OR REPLACE VIEW CAR_IN(CARLICENCEview,CARTYPEview,TIMECARINview,CARFEEview) AS SELECT CARLICENCE,CARINFO.CARTYPE,TIMECARIN,FEE*trunc((sysdate-TIMECARIN)*24) FROM CARINFO,FEESTAND WHERE TIMECAROUT IS NULL AND CARINFO.CARTYPE = FEESTAND.CARTYPE AND carinfo.chewei=01 ``` 视图是这样建立的,不是特别会
oracle 数据库 关于使用类型的问题
我定义了 一个类型 和一个嵌套表 如下 create or replace type typ_point1 AS OBJECT( 代码1 varchar(3), 代码2 varchar(8), 代码3 Timestamp....ect ); create or replace TYPE typ_point1newt as table of typ_point1new; CREATE TABLE "C##GAOMIAO"."2MINS" ( "编号" NUMBER(12,0), "上级编号" NUMBER(12,0), "参照点" "C##GAOMIAO"."TYP_POINT1new" , ) 在存储函数中 使用 SELECT 参照点 into wtf FROM LUOWEN_2MINS WHERE 上级编号 = INTPUT2 AND 编号 = I; 得到wtf (TYP_POINT1new)那么我如何用一个数组varray来得到里面的数据呢 例如 代码5 ,之后使用数组来进行运算。
oracle 数据库修改字段
我现在有一个需求,Oracle数据库中有 700多万数据,我现在想修改其中一个字段的值,数据至少 500万,(如,字段type=0的 我要修改为 type=10) 请哪位高手 告诉我 用什么方法 更快的执行。我 用一个update 语句在数据库中操作,一晚上都没有执行完,时间太长了。请告诉我一个快速的执行方法。我现在 再用存储过程,不过看着速度 也不似很快。我的 存储过程 如下, create or replace procedure up_table as begin update rytojs t set t.RLD_SFJTSLR='10' where t.RLD_SFJTSLR='0'; commit; end; exec up_table 请各位看看我的存储 过程有什么问题。 小弟 急需 解决 办法。
oracle数据库创建存储过程老是出错
要求:创建存储过程生成指定班级的课程表 代码如下: create or replace procedure up-class(classID int) as select* from class1courselist where class1courselist.classID=classID execute up_class '1101' end up_class; / 一直提示编译错误 PLS-00103:出现符号"select"在需要下列 之一时: begin function pragma.......................(很多很多)
在Oracle PL/SQL中创建数据包,遇到报错:PLS-00103:出现符号“CREATE”,请问如何解决?
本人小白,我在创建基于存储过程的数据块时,第一次按照网上的教程,依葫芦画样创建成功后,运行也成功,但是手贱没有保存,也因为脑残有点飘,第二次自己创建时出现问题,后续把第一次成功做的样例拿出来再对照编写时,不断报错,最后重新把第一次做的样例拿出来已经无法运行,所以来此请教各位大佬。 先把我参考的网址挂出来:https://blog.csdn.net/weixin_33915554/article/details/85448269 接下来,我说一下问题: 我在Oracle的PL/SQL Developer中创建了一个Package: hek_ar_reciept_pg 包中代码贴出来如下: ``` create or replace package hek_ar_reciept_pg is type line_record_type is record( LINE_ID NUMBER, HEADER_ID NUMBER, CUSTOMER_TRX_ID NUMBER, APPLY_ACCOUNT NUMBER, APPLY_DATE DATE, GL_DATE DATE, DISCOUNT NUMBER, REVERSAL_GL_DATE DATE, AMOUNT_APPLIED_FROM NUMBER, MATCH_FLAG VARCHAR2(30), APPLY_FLAG VARCHAR2(10), TRX_NUMBER VARCHAR2(30), INSTALLMENT NUMBER, AMOUNT_DUE_REMAINING NUMBER, INVOICE_CURRENCY_CODE VARCHAR2(15), CUSTOMER_NUMBER VARCHAR2(30), CUSTOMER_ID NUMBER, CUSTOMER_NAME VARCHAR2(50), TRX_CLASS_NAME VARCHAR2(4000), TRX_CLASS_CODE VARCHAR2(20), TRX_TYPE_NAME VARCHAR2(20), PURCHASE_ORDER VARCHAR2(50), CT_REFERENCE VARCHAR2(30), LOCATION_NAME VARCHAR2(40), BILL_TO_SITE_USE_ID NUMBER, STATUS VARCHAR2(30), CASH_RECEIPT_ID NUMBER, PS_CUSTOMER_TRX_ID NUMBER, TRX_BATCH_SOURCE_NAME VARCHAR2(50), DUE_DATE DATE, TERM_ID NUMBER, CUST_TRX_TYPE_ID NUMBER, PROGRAM_APPLICATION_ID NUMBER, PROGRAM_ID NUMBER, REQUEST_ID NUMBER, AMOUNT_DUE_ORIGINAL NUMBER, AMOUNT_IN_DISPUTE NUMBER, AMOUNT_LINE_ITEMS_ORIGINAL NUMBER, ACCTD_AMOUNT_DUE_REMAINING NUMBER, TRX_DATE DATE, APPLIED_PAYMENT_SCHEDULE_ID NUMBER, CREATED_BY NUMBER, CREATION_DATE DATE, LAST_UPDATED_BY NUMBER, LAST_UPDATE_DATE DATE, LAST_UPDATE_LOGIN NUMBER, ORG_ID NUMBER, ATTRIBUTE_CATEGORY VARCHAR2(30), ATTRIBUTE1 VARCHAR2(50), ATTRIBUTE2 VARCHAR2(50), ATTRIBUTE3 VARCHAR2(50), ATTRIBUTE4 VARCHAR2(50), ATTRIBUTE5 VARCHAR2(50), ATTRIBUTE6 VARCHAR2(50), ATTRIBUTE7 VARCHAR2(50), ATTRIBUTE8 VARCHAR2(50), ATTRIBUTE9 VARCHAR2(50), ATTRIBUTE10 VARCHAR2(50), ATTRIBUTE11 VARCHAR2(150), ATTRIBUTE12 VARCHAR2(150), ATTRIBUTE13 VARCHAR2(150), ATTRIBUTE14 VARCHAR2(150), ATTRIBUTE15 VARCHAR2(150) ); type lines_record_type is record( LINE_ID NUMBER, HEADER_ID NUMBER, CUSTOMER_TRX_ID NUMBER, APPLY_ACCOUNT NUMBER, APPLY_DATE DATE, GL_DATE DATE, DISCOUNT NUMBER, REVERSAL_GL_DATE DATE, AMOUNT_APPLIED_FROM NUMBER, MATCH_FLAG VARCHAR2(30), APPLY_FLAG VARCHAR2(10), CREATED_BY NUMBER, CREATION_DATE DATE, LAST_UPDATED_BY NUMBER, LAST_UPDATE_DATE DATE, LAST_UPDATE_LOGIN NUMBER, ORG_ID NUMBER, ATTRIBUTE_CATEGORY VARCHAR2(30), ATTRIBUTE1 VARCHAR2(50), ATTRIBUTE2 VARCHAR2(50), ATTRIBUTE3 VARCHAR2(50), ATTRIBUTE4 VARCHAR2(50), ATTRIBUTE5 VARCHAR2(50), ATTRIBUTE6 VARCHAR2(50), ATTRIBUTE7 VARCHAR2(50), ATTRIBUTE8 VARCHAR2(50), ATTRIBUTE9 VARCHAR2(50), ATTRIBUTE10 VARCHAR2(50), ATTRIBUTE11 VARCHAR2(150), ATTRIBUTE12 VARCHAR2(150), ATTRIBUTE13 VARCHAR2(150), ATTRIBUTE14 VARCHAR2(150), ATTRIBUTE15 VARCHAR2(150) ); type line_ref_cursor is ref cursor return line_record_type; type line_table_type is table of lines_record_type index by binary_integer; procedure line_query(dmlset in out line_ref_cursor); procedure line_lock(dmlset in out line_table_type); procedure line_insert(dmlset in out line_table_type); procedure line_update(dmlset in out line_table_type); procedure line_delete(dmlset in out line_table_type); end; create or replace package body hek_ar_reciept_pg is procedure line_query(dmlset in out line_ref_cursor) is begin open dmlset for select line_id, header_id, customer_trx_id, apply_account, apply_date, gl_date, discount, reversal_gl_date, amount_applied_from, match_flag, apply_flag, trx_number, installment, amount_due_remaining, invoice_currency_code, customer_number, customer_id, customer_name, trx_class_name, trx_class_code, trx_type_name, purchase_order, ct_reference, location_name, bill_to_site_use_id, status, cash_receipt_id, ps_customer_trx_id, trx_batch_source_name, due_date, term_id, cust_trx_type_id, program_application_id, program_id, request_id, amount_due_original, amount_in_dispute, amount_line_items_original, acctd_amount_due_remaining, trx_date, applied_payment_schedule_id, created_by, creation_date, last_updated_by, last_update_date, last_update_login, org_id, attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12, attribute13, attribute14, attribute15 from hek_ar_reciept_lines_v; end; procedure line_lock(dmlset in out line_table_type) is l_line_id number; begin select line_id into l_line_id from hek_ar_reciept_lines_all where line_id = dmlset(1).line_id for update; end; procedure line_insert(dmlset in out line_table_type) is begin insert into hek_ar_reciept_lines_all(LINE_ID, HEADER_ID, CUSTOMER_TRX_ID, APPLY_ACCOUNT, APPLY_DATE, GL_DATE, DISCOUNT, REVERSAL_GL_DATE, AMOUNT_APPLIED_FROM, MATCH_FLAG, APPLY_FLAG, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN, ORG_ID, ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15) values(dmlset(1).LINE_ID, dmlset(1).HEADER_ID, dmlset(1).CUSTOMER_TRX_ID, dmlset(1).APPLY_ACCOUNT, dmlset(1).APPLY_DATE, dmlset(1).GL_DATE, dmlset(1).DISCOUNT, dmlset(1).REVERSAL_GL_DATE, dmlset(1).AMOUNT_APPLIED_FROM, dmlset(1).MATCH_FLAG, dmlset(1).APPLY_FLAG, dmlset(1).CREATED_BY, dmlset(1).CREATION_DATE, dmlset(1).LAST_UPDATED_BY, dmlset(1).LAST_UPDATE_DATE, dmlset(1).LAST_UPDATE_LOGIN, dmlset(1).ORG_ID, dmlset(1).ATTRIBUTE_CATEGORY, dmlset(1).ATTRIBUTE1, dmlset(1).ATTRIBUTE2, dmlset(1).ATTRIBUTE3, dmlset(1).ATTRIBUTE4, dmlset(1).ATTRIBUTE5, dmlset(1).ATTRIBUTE6, dmlset(1).ATTRIBUTE7, dmlset(1).ATTRIBUTE8, dmlset(1).ATTRIBUTE9, dmlset(1).ATTRIBUTE10, dmlset(1).ATTRIBUTE11, dmlset(1).ATTRIBUTE12, dmlset(1).ATTRIBUTE13, dmlset(1).ATTRIBUTE14, dmlset(1).ATTRIBUTE15); end; procedure line_update(dmlset in out line_table_type) is begin update hek_ar_reciept_lines_all set HEADER_ID = dmlset(1).HEADER_ID,--LINE_ID = dmlset(1).LINE_ID, CUSTOMER_TRX_ID = dmlset(1).CUSTOMER_TRX_ID, APPLY_ACCOUNT = dmlset(1).APPLY_ACCOUNT, APPLY_DATE = dmlset(1).APPLY_DATE, GL_DATE = dmlset(1).GL_DATE, DISCOUNT = dmlset(1).DISCOUNT, REVERSAL_GL_DATE = dmlset(1).REVERSAL_GL_DATE, AMOUNT_APPLIED_FROM = dmlset(1).AMOUNT_APPLIED_FROM, MATCH_FLAG = dmlset(1).MATCH_FLAG, APPLY_FLAG = dmlset(1).APPLY_FLAG, CREATED_BY = dmlset(1).CREATED_BY, CREATION_DATE = dmlset(1).CREATION_DATE, LAST_UPDATED_BY = dmlset(1).LAST_UPDATED_BY, LAST_UPDATE_DATE = dmlset(1).LAST_UPDATE_DATE, LAST_UPDATE_LOGIN = dmlset(1).LAST_UPDATE_LOGIN, ORG_ID = dmlset(1).ORG_ID, ATTRIBUTE_CATEGORY = dmlset(1).ATTRIBUTE_CATEGORY, ATTRIBUTE1 = dmlset(1).ATTRIBUTE1, ATTRIBUTE2 = dmlset(1).ATTRIBUTE2, ATTRIBUTE3 = dmlset(1).ATTRIBUTE3, ATTRIBUTE4 = dmlset(1).ATTRIBUTE4, ATTRIBUTE5 = dmlset(1).ATTRIBUTE5, ATTRIBUTE6 = dmlset(1).ATTRIBUTE6, ATTRIBUTE7 = dmlset(1).ATTRIBUTE7, ATTRIBUTE8 = dmlset(1).ATTRIBUTE8, ATTRIBUTE9 = dmlset(1).ATTRIBUTE9, ATTRIBUTE10 = dmlset(1).ATTRIBUTE10, ATTRIBUTE11 = dmlset(1).ATTRIBUTE11, ATTRIBUTE12 = dmlset(1).ATTRIBUTE12, ATTRIBUTE13 = dmlset(1).ATTRIBUTE13, ATTRIBUTE14 = dmlset(1).ATTRIBUTE14, ATTRIBUTE15 = dmlset(1).ATTRIBUTE15 where line_id = dmlset(1).line_id; end; procedure line_delete(dmlset in out line_table_type) is begin delete from hek_ar_reciept_lines_all where line_id = dmlset(1).line_id; end; end; ``` 但是执行后,代码第118行出现报错 118:create or replace package body hek_ar_reciept_pg is 错误为:118 PLS-00103:出现符号“CREATE” ![图片说明](https://img-ask.csdn.net/upload/202002/26/1582688274_946360.png) (这里代码行数118是我现在电脑上的行数,对照截图可能有一两行空白行的出入) 针对这个错误,我看了好多帖子,但是始终有错,后来,我觉得饭一口一口吃,从第118行开始全部删掉,只留下上面line_record_type记录部分,后成功运行,无报错, ![图片说明](https://img-ask.csdn.net/upload/202002/26/1582688736_196739.png) 但是,这个时候,我在Oracle Forms builder中创建数据库向导的时候,发现在输入过程的时候,我输入:hek_ar_reciept_pg.line_query或hek_ar_reciept_pg.line_record,刷新的时候,发现报错 FRM-10760:描述存储过程时遇到错误, ![图片说明](https://img-ask.csdn.net/upload/202002/26/1582688651_407224.png) 接下来始终卡在这里,进退不得,一方面无法进行数据块的创建,另一方面在Oracle PL/SQL developer中也没什么好办法继续下去,麻烦各位大佬讲解一下,指导一二,感激不尽!
oracle数据库oracle数据库增不进去数据
CREATE OR REPLACE PROCEDURE PROC_IMPORT_VILLAGE_DATA AUTHID CURRENT_USER AS zhs VARCHAR2(126); zrks VARCHAR2(126); zrcs VARCHAR2(126); pkhs VARCHAR2(126); pkrks VARCHAR2(126); dbrks VARCHAR2(126); dbhs VARCHAR2(126); wbrks VARCHAR2(126); wbhs VARCHAR2(126); ssmzrks VARCHAR2(126); fnrks VARCHAR2(126); cjrks VARCHAR2(126); ldlrk VARCHAR2(126); wcwgrs VARCHAR2(126); villageid VARCHAR2(126); p VARCHAR2(126); --public VARCHAR2(126) := '0'; cursor cur is select * from village_import; --定义游标 cursor dict is SELECT * FROM TBL_SYS_DICT D WHERE D.DICT_TYPE_ID = (SELECT DT.DICT_TYPE_ID FROM TBL_SYS_DICT_TYPE DT WHERE DT.DICT_TYPE_ID = '188FF57D8BF06D2CE0537E64120AF200') ORDER BY D.DICT_VALUE ASC; BEGIN for temp in cur loop --temp为临时变量名,自己任意起 zhs := temp.总户数; zrks := temp.总人口数; zrcs := temp.自然村数; pkhs := temp.贫困户数; pkrks := temp.贫困人口数; dbrks := temp.低保人口数; dbhs := temp.低保户数; wbrks := temp.五保人口数; wbhs := temp.五保户数; ssmzrks := temp.少数民族人口数; fnrks := temp.妇女人口数; cjrks := temp.残疾人口数; ldlrk := temp.劳动力人数; wcwgrs := temp.外出务工人数; villageid := temp.村主键; for dd in dict loop if dd.dict_value = 'B2' then p := temp.总户数 ; end if; if dd.dict_value = 'B3' then p := temp.总人口数 ; end if; if dd.dict_value = 'B1' then p := temp.自然村数 ; end if; if dd.dict_value = 'B2a' then p := temp.贫困户数 ; end if; if dd.dict_value = 'B3a' then p := temp.贫困人口数 ; end if; if dd.dict_value = 'B3b' then p := temp.低保人口数 ; end if; if dd.dict_value = 'B2b' then p := temp.低保户数 ; end if; if dd.dict_value = 'B3c' then p := temp.五保人口数 ; end if; if dd.dict_value = 'B2c' then p := temp.五保户数 ; end if; if dd.dict_value = 'B3d' then p := temp.少数民族人口数 ; end if; if dd.dict_value = 'B3e' then p := temp.妇女人口数 ; end if; if dd.dict_value = 'B3f' then p := temp.残疾人口数 ; end if; if dd.dict_value = 'B4' then p := temp.劳动力人数 ; end if; if dd.dict_value = 'B4a' then p := temp.外出务工人数 ; end if; insert into tbl_fil_village_basic (pk_village_basic_id, fk_village_id, fk_dict_name, basic_value, stat_year, create_time, creater, creater_org, year) select sys_guid(), villageid, dd.dict_value, p, '2018', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), 'admin', '', '2018' from dual; commit; end loop; end loop; END PROC_IMPORT_VILLAGE_DATA;
oracle 对象数据库,定义时,ref的是基类,实例化可以用继承的类型吗?如何使用?
今天重新测试了一下,可以支持子类插入(算是支持泛型?),但如何取出这个子类的属性? 哪位大神指导下。 drop table tab1; drop type obj_real; drop type obj_ref; drop type obj_base; CREATE OR REPLACE TYPE obj_base AS OBJECT ( col1 varchar2(100) ) not final NOT INSTANTIABLE; create or replace type obj_real under obj_base(col2 varchar2(100)); create or replace type obj_ref as object(col1 obj_base); create table tab1 of obj_ref; insert into tab1(col1) values(obj_real('test1','test2')); selet * from tab1,只能取出obj_base
求指教 oracle数据库 这是什么问题?“警告: 创建的过程带有编译错误。”
请问各位大神 这个错在哪里? 5/1 PL/SQL: SQL Statement ignored 5/36 PL/SQL: ORA-00942: 表或视图不存在 ``` create or replace procedure jianbiao(biaoming in varchar) is shuliang number; begin select count(*) into shuliang from user_table where table_name=biaoming; if shuliang>0 then execute immediate 'truncate table biaoming'; dbms_output.put_line('该表存在,已清空该表'); else execute immediate 'create table biaoming'; dbms_output.put_line('已创建该表'); end if; end; ```
在oracle数据库中的触发器怎么可以回滚主事务的操作
我执行下面这段代码之后没有出错,然后更新cusinfo表,想要回滚主事务的操作,但是这里提示说不能再触发器使用rollback(使用子事务也没什么用) create or replace trigger forbid_insert_update_cusinfo --触发器,通过cusinfo表的FILINGMAN或CHARGEMAN列值是否存在于userinfo表中,若存在插入,若不存在就rollback before update or insert of filingman,chargeman on cusinfo for each row declare v_countf number; v_countc number; begin select count(*) into v_countf from userinfo where username=:new.filingman; select count(*) into v_countc from userinfo where username=:new.chargeman; if v_countf=0 then--要注意,这里的判断不能写== rollback; elsif v_countc=0 then rollback; end if; end;
oracle数据库 dblink 连接 sqlserver数据库,跨库创建视图使用union all时报:字符集不匹配
create or replace view SCADA_NET_HISTORY_V as select a1."DeviceName", a1."DeviceNo", m1."SeckId", m1."MeterName", t1."TypeName", c1."ChannelNo", d1."DataTime", d1."Data" from Channel@msql c1, Device@msql a1, DataType@msql t1, Data_21@msql d1, Meter@msql m1 where c1."DeviceId"=a1."DeviceId" and c1."DataTypeId"=t1."DataTypeId" and d1."ChannelId"=c1."ChannelId" and m1."MeterId"=c1."MeterId" union all select a2."DeviceName", a2."DeviceNo" , m2."SeckId", m2."MeterName", t2."TypeName", c2."ChannelNo", d2."DataTime", d2."Data" from Channel@msql c2, Device@msql a2, DataType@msql t2, Data_23@msql d2, Meter@msql m2 where c2."DeviceId"=a2."DeviceId" and c2."DataTypeId"=t2."DataTypeId" and d2."ChannelId"=c2."ChannelId" and m2."MeterId"=c2."MeterId"
db2数据库 序列和触发器的问题
CREATE SEQUENCE SEQtbCaPolicy INCREMENT BY 1 START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE CACHE 20 NOORDER; CREATE OR REPLACE TRIGGER TRItbCaPolicyID BEFORE INSERT ON tbCaPolicy for each row begin select SEQtbCaPolicy.nextval into :new.iID from dual; end; 以上是oracle数据库的实现,我想问下在db2 中如何实现select SEQtbCaPolicy.nextval into :new.iID from dual,请各位帮帮忙,谢谢。。。。
oracle 存储过程怎么怎么调用??
CREATE OR REPLACE PACKAGE "TEST_PACKAGE" is type MYCURSOR is ref cursor; end TEST_PACKAGE; create or replace procedure TEST_PRO( p_Cursor out TEST_PACKAGE.MYCURSOR ) is roleId NUMBER; rolename VARCHAR2(255); roledesc varchar2(255); begin --into roleId,rolename,roledesc open p_Cursor for select * from cms_sys_role t ; end; 上面我写的一个简单的存储过程,请问这个怎么调用? 数据库里怎么调用
oracle数据库,提示出现@符号时。。。。。
create or replace procedure usp_GetMyPhotos @pageIndex int, --当前页码 @pageSize int, --每页多少条 @pageCount int output --计算 总共多少页 as declare @count int, --总共多少条 select @count =COUNT(*) from TB_PROCURECATALOG, set @pageCount = CEILING( @count*1.0/@pageSize) select * from (select A.*,rownum RN FROM (SELECT * from tb_procurecatalog ORDER BY PROCURECATALOGID)A ) where num between @pageSize*(@pageIndex-1) + 1 and @pageSize*@pageIndex 测试: declare @n int, exec usp_GetMyPhotos 1,3,@n output print @n
oracle 存储过程参数问题
1 --定义一个存储过程,参数是rowtype类型的。 create or replace procedure do_create_emp(p_data in emp%rowtype) as begin dbms_output.put_line('aaaaaaaaaaa'); end; 2 调用上面的那个存储过程 create or replace procedure create_emp() as cursor emp_data is select * from emp; begin for t_data in emp_data loop 此处怎么调用上面的那个存储过程,我想把 t_data 传进去,该怎么写 end loop; end;
执行更新时提示错误:Oracle表xxx发生变化,数据库不能读它
触发器代码 create or replace trigger departmentUpdate after update on departments for each row begin IF updating then UPDATE employees set departmentid = :new.departmentid where departmentid = :old.departmentid; end if; end; 更新代码: update departments set departmentid = 7 where departmentid = 1;
奇怪的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 望高手指导一下! 谢谢!
java多线程高并发下的oracle数据库异常
代码的功能是生成一个随机的序列化的订单号,正常的情况下一个一个跑没问题,在进行压力测试的时候,多线程高并发下,oracle的create语句就会报错,说是 java.lang.RuntimeException: org.springframework.jdbc.BadSqlGrammarException: ConnectionCallback; bad SQL grammar []; nested exception is java.sqlSQLException: ORA-00955: 名称已由现有对象使用 求大神看下。 代码如下: ``` package utils.spring; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.stereotype.Component; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import utils.Lang; import javax.sql.DataSource; import java.sql.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 序列发生器(可用于高并发、可回收等场景) * * @author lujijiang * */ @Component @ConfigurationProperties(prefix = "seqGenerator") final public class SequenceGenerator implements InitializingBean { interface Atom<T> { T atom(Connection connection) throws Exception; } public static <T> T atom(Connection connection, Atom<T> atom) throws Exception { connection.setAutoCommit(false); connection .setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); try { T obj = atom.atom(connection); connection.commit(); return obj; } catch (Exception e) { connection.rollback(); throw e; } } static Map<String, String> createSqlMap = new ConcurrentHashMap<String, String>(); static { createSqlMap .put("h2", "CREATE TABLE %s (v$key BIGINT NOT NULL,v$key$ varchar(256),v$seq BIGINT NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); createSqlMap .put("mysql", "CREATE TABLE %s (v$key BIGINT NOT NULL,v$key$ varchar(256),v$seq BIGINT NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); createSqlMap .put("informix", "CREATE TABLE %s (v$key DECIMAL(16,0) NOT NULL,v$key$ varchar(256),v$seq DECIMAL(16,0) NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); createSqlMap .put("oracle", "CREATE TABLE %s (v$key NUMBER(16,0) NOT NULL,v$key$ varchar2(256),v$seq NUMBER(16,0) NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); } static Map<String, String> insertSqlMap = new ConcurrentHashMap<String, String>(); static { insertSqlMap .put("h2", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select ifnull(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); insertSqlMap .put("mysql", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select ifnull(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); insertSqlMap .put("informix", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select nvl(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); insertSqlMap .put("oracle", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select nvl(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); } /** * 事务模版 */ TransactionTemplate transactionTemplate; /** * 是否使用新事务 */ boolean newTransaction = true; /** * JDBC模版 */ JdbcTemplate jdbcTemplate; /** * 尝试次数(默认10次) */ int tryTime = 10; /** * 数据库类型 */ String databaseType; /** * 表名 */ private String tableName; /** * 容量 */ private int capacity = 25; /** * 步进 */ private int step = 1; /** * 是否可回收序列号 */ protected boolean recyclable; @Autowired public void setTransactionManager( PlatformTransactionManager transactionManager) { if (transactionManager != null) { transactionTemplate = new TransactionTemplate(transactionManager); transactionTemplate .setIsolationLevel(TransactionTemplate.ISOLATION_READ_COMMITTED); transactionTemplate .setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED); } } public boolean isNewTransaction() { return newTransaction; } public void setNewTransaction(boolean newTransaction) { this.newTransaction = newTransaction; } public TransactionTemplate getTransactionTemplate() { return transactionTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Autowired public void setDataSource(DataSource dataSource) { if (jdbcTemplate == null) { jdbcTemplate = new JdbcTemplate(dataSource); } } public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } public void setTryTime(int tryTime) { this.tryTime = tryTime; } public void setDatabaseType(String databaseType) { if (databaseType != null) { databaseType = databaseType.trim().toLowerCase(); this.databaseType = databaseType; } } public void setTableName(String tableName) { this.tableName = tableName == null ? null : tableName.trim(); } public void setCapacity(int capacity) { this.capacity = capacity; } public void setStep(int step) { this.step = step < 1 ? 1 : step; } public void setRecyclable(boolean recyclable) { this.recyclable = recyclable; } /** * 创建序列 * * @param name * @param length * @param start * @return */ public String generateSequence(String name, int length, long start) { final long key = generateKey(name); try { return generateSequence(key, length, start, name); } catch (Throwable t) { createSequenceTable();//错误就是定位在这里 int time = tryTime >= 0 ? tryTime : 10000; while (time-- > 0) { try { return generateSequence(key, length, start, name); } catch (Throwable e) { } } throw new RuntimeException("Generate sequence failure", t); } } private long generateKey(String name) { return 10000000000L + name.trim().hashCode(); } /** * 创建序列 * * @param key * @param length * @return */ public String generateSequence(String key, int length) { return generateSequence(key, length, 0); } /** * 创建序列 * * @param key * @return */ public String generateSequence(String key) { return generateSequence(key, 6); } private synchronized void createSequenceTable() { try { jdbcTemplate.execute(new ConnectionCallback<Integer>() { public Integer doInConnection(Connection connection) throws SQLException, DataAccessException { ResultSet rs = connection.getMetaData().getTables(null, null, tableName, null); try { while (rs.next()) { return 1; } } finally { rs.close(); } String createSql = String.format( createSqlMap.get(databaseType), tableName); Statement statement = connection.createStatement(); try { statement.execute(createSql);//错误就是定位在这里 } finally { statement.close(); } return 0; } }); } catch (Throwable t) { throw new RuntimeException(t); } } private String generateSequence(final long key, final int length, final long start, final String name) { if (newTransaction) { try { Connection connection = jdbcTemplate.getDataSource() .getConnection(); try { return atom(connection, new Atom<String>() { @Override public String atom(Connection connection) throws Exception { if (recyclable) { String no = getRecoveredSequence(connection, key, length); if (no != null) { return no; } } Statement statement = connection.createStatement(); try { String insertSql = String.format(insertSqlMap .get(databaseType), tableName, key, name.replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(connection, insertSql); String querySql = String .format("select max(v$seq) from %s where v$key=%d and v$state='1'", tableName, key); ResultSet rs = statement.executeQuery(querySql); try { while (rs.next()) { Long max = rs.getLong(1); if (max < start) {// 重新初始化 String deleteSql = String .format("delete from %s where v$key=%d and v$state='1'", tableName, key); execute(connection, deleteSql); insertSql = String.format( insertSqlMap .get(databaseType), tableName, key, name.replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(connection, insertSql); return fillLeftZero(start, length); } if (capacity > 0 && max % capacity == 0) { String deleteSql = String .format("delete from %s where v$key=%d and v$seq<>%d and v$state='1'", tableName, key, max); execute(connection, deleteSql); } return fillLeftZero(max, length); } } finally { rs.close(); } } finally { statement.close(); } throw new IllegalStateException( SequenceGenerator.this.getClass() .getSimpleName() + "无法获取单号,不可能发生的异常"); } }); } finally { connection.close(); } } catch (Exception e) { throw Lang.unchecked(e); } } return getTransactionTemplate().execute( new TransactionCallback<String>() { public String doInTransaction(TransactionStatus ts) { try { if (recyclable) { String no = jdbcTemplate .execute(new ConnectionCallback<String>() { public String doInConnection( Connection connection) throws SQLException, DataAccessException { return getRecoveredSequence( connection, key, length); } }); if (no != null) { return no; } } String insertSql = String.format(insertSqlMap .get(databaseType), tableName, key, name .replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(insertSql); String querySql = String .format("select max(v$seq) from %s where v$key=%d and v$state='1'", tableName, key); Long max = jdbcTemplate.queryForObject(querySql, Long.class); if (max < start) {// 重新初始化 String deleteSql = String .format("delete from %s where v$key=%d and v$state='1'", tableName, key); execute(deleteSql); insertSql = String.format(insertSqlMap .get(databaseType), tableName, key, name.replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(insertSql); return fillLeftZero(start, length); } if (capacity > 0 && max % capacity == 0) { String deleteSql = String .format("delete from %s where v$key=%d and v$seq<>%d and v$state='1'", tableName, key, max); execute(deleteSql); } return fillLeftZero(max, length); } catch (Throwable t) { ts.isRollbackOnly(); throw new RuntimeException(t); } } }); } /** * 参数化执行SQL * * @param sql * @param args * @return */ protected int execute(String sql, final Object... args) { return jdbcTemplate.execute(sql, new PreparedStatementCallback<Integer>() { public Integer doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException { if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } } return ps.executeUpdate(); } }); } /** * 参数化执行SQL * * @param sql * @param args * @return * @throws SQLException */ protected int execute(Connection conn, String sql, final Object... args) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql); try { if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } } return ps.executeUpdate(); } finally { ps.close(); } } protected String fillLeftZero(Long max, int length) { StringBuilder sb = new StringBuilder(); sb.append(max); if (sb.length() >= length) { return sb.substring(sb.length() - length); } else { for (int i = sb.length(); i < length; i++) { sb.insert(0, '0'); } } return sb.toString(); } /** * 获取已回收的序列 * * @param connection * @param key * @throws SQLException */ protected String getRecoveredSequence(Connection connection, long key, int length) throws SQLException { Statement statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); try { String querySql = String .format("select v$key,v$seq,v$state from %s where v$key = %d and v$state<>'1' for update", tableName, key); statement.executeQuery(querySql); querySql = String .format("select v$key,v$seq,v$state from %s where v$key = %d and v$state<>'1' order by v$seq asc", tableName, key); ResultSet rs = statement.executeQuery(querySql); try { while (rs.next()) { try { Long min = rs.getLong(2); rs.updateString(3, "1"); rs.updateRow(); return fillLeftZero(min, length); } catch (Throwable ex) { } } } finally { rs.close(); } } finally { statement.close(); } return null; } /** * 回收序列号 * * @param name * @param sequence */ public void recoveredSequence(final String name, final String sequence) { final long key = generateKey(name); final long seq = Long.valueOf(sequence); if (newTransaction) { try { Connection connection = jdbcTemplate.getDataSource() .getConnection(); try { atom(connection, new Atom<Object>() { public Object atom(Connection connection) throws Exception { String updateSql = String .format("update %s set v$state='0' where v$key=%d and v$seq=%d", tableName, key, seq); int count = execute(connection, updateSql); if (count == 0) { String insertSql = String .format("insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',%d,'0')", tableName, key, name.replace("'", "''"), seq); execute(connection, insertSql); } return null; } }); connection.commit(); } finally { connection.close(); } } catch (Exception e) { throw Lang.unchecked(e); } } else { transactionTemplate.execute(new TransactionCallback<Integer>() { public Integer doInTransaction(TransactionStatus status) { try { String updateSql = String .format("update %s set v$state='0' where v$key=%d and v$seq=%d", tableName, key, seq); int count = execute(updateSql); if (count == 0) { String insertSql = String .format("insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',%d,'0')", tableName, key, name.replace("'", "''"), seq); execute(insertSql); } return null; } catch (Throwable t) { status.isRollbackOnly(); throw new RuntimeException(t); } } }); } } public void afterPropertiesSet() throws Exception { if (this.databaseType == null) { throw new IllegalArgumentException(String.format( "Property '%s' is required", "databaseType")); } if (databaseType != null) { if (!createSqlMap.containsKey(databaseType)) { throw new IllegalStateException(String.format( "Unsupported database type:%s", databaseType)); } } if (this.jdbcTemplate == null) { throw new IllegalArgumentException(String.format( "Property '%s' or '%s' is required", "dataSource", "jdbcTemplate")); } if (this.tableName == null) { throw new IllegalArgumentException(String.format( "Property '%s' is required", "tableName")); } if (!tableName.matches("[a-zA-Z_][a-zA-Z0-9_]*") || tableName.length() > 16) { throw new IllegalStateException(String.format( "Illegal tableName:%s", tableName)); } if (!this.newTransaction) { if (this.transactionTemplate == null) { throw new IllegalArgumentException(String.format( "Property '%s' is required", "transactionManager")); } } } } ``` java.lang.RuntimeException: org.springframework.jdbc.BadSqlGrammarException: ConnectionCallback; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-00955: 名称已由现有对象使用 at utils.spring.SequenceGenerator.createSequenceTable(SequenceGenerator.java:272) at utils.spring.SequenceGenerator.generateSequence(SequenceGenerator.java:202) at utils.spring.SequenceGenerator.generateSequence(SequenceGenerator.java:227) at cart.service.service.OrderService.generateOrderNo(OrderService.java:806) at cart.service.service.OrderService.saveVirtualGoodsToOrder(OrderService.java:220) at cart.service.service.OrderService$$FastClassBySpringCGLIB$$19f99be7.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) at cart.service.service.OrderService$$EnhancerBySpringCGLIB$$feb8eef.saveVirtualGoodsToOrder(<generated>) at cart.service.apiImpl.OrderMainApiImpl.saveVirtualGoodsToOrder(OrderMainApiImpl.java:223) at cart.service.apiImpl.OrderMainApiImpl$$FastClassBySpringCGLIB$$fa3518e.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651) at cart.service.apiImpl.OrderMainApiImpl$$EnhancerBySpringCGLIB$$497f044.saveVirtualGoodsToOrder(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.weibo.api.motan.rpc.DefaultProvider.invoke(DefaultProvider.java:57) at com.weibo.api.motan.rpc.AbstractProvider.call(AbstractProvider.java:47) at com.weibo.api.motan.filter.AccessLogFilter.filter(AccessLogFilter.java:56) at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$2.call(ProtocolFilterDecorator.java:150) at utils.rpc.motan.filter.OpenEntityManagerInMotanFilter.filter(OpenEntityManagerInMotanFilter.java:171) at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$2.call(ProtocolFilterDecorator.java:150) at com.weibo.api.motan.transport.ProviderMessageRouter.call(ProviderMessageRouter.java:96) at com.weibo.api.motan.transport.ProviderProtectedMessageRouter.call(ProviderProtectedMessageRouter.java:79) at com.weibo.api.motan.transport.ProviderMessageRouter.handle(ProviderMessageRouter.java:91) at com.weibo.api.motan.transport.support.DefaultRpcHeartbeatFactory$HeartMessageHandleWrapper.handle(DefaultRpcHeartbeatFactory.java:82) at com.weibo.api.motan.transport.netty.NettyChannelHandler.processRequest(NettyChannelHandler.java:139) at com.weibo.api.motan.transport.netty.NettyChannelHandler.access$000(NettyChannelHandler.java:47) at com.weibo.api.motan.transport.netty.NettyChannelHandler$1.run(NettyChannelHandler.java:116) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.springframework.jdbc.BadSqlGrammarException: ConnectionCallback; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-00955: 名称已由现有对象使用 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:99) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:360) at utils.spring.SequenceGenerator.createSequenceTable(SequenceGenerator.java:247) ... 39 more Caused by: java.sql.SQLException: ORA-00955: 名称已由现有对象使用 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210) at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:961) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190) at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1726) at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1696) at utils.spring.SequenceGenerator$1.doInConnection(SequenceGenerator.java:264) at utils.spring.SequenceGenerator$1.doInConnection(SequenceGenerator.java:247) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:353) ... 40 more
Oracle中table类型数据赋值给cursor
在Type中创建了一个类型: create or replace type bb_ptyxztqk_Table as table of bb_ptyxztqk_type; 里面放自定义的record类型,现在要将table中的数据放置到cursor中,怎么弄? 这样弄不行: open cur for select r_index, r_name, r_this, r_last, r_minus from table(cast(obj_type_tab AS bb_ptyxztqk_type)); 求大神指点! 整体代码: 类型: create or replace type bb_ptyxztqk_Table as table of bb_ptyxztqk_type; create or replace type bb_ptyxztqk_Type as object( d_index number, d_name varchar2(100), d_this number, d_last number, d_minus number ); sql: PROCEDURE pro_getdata(enddate in varchar2, cur out type_cursor) is Type RecType Is Record( r_index number, r_name varchar2(100), r_this number, r_last number, r_minus number); Type TabType Is Table Of RecType Index By Binary_Integer; myTab TabType; obj_type_tab bb_ptyxztqk_table := bb_ptyxztqk_table(); l_index number := 1; begin if (l_index = 1) then myTab(l_index).r_index := 1; myTab(l_index).r_name := '上线单位'; myTab(l_index).r_this := 123; myTab(l_index).r_last := 456; myTab(l_index).r_minus := 333; end if; l_index := myTab.First; for l_in in l_index .. myTab.count Loop obj_type_tab.EXTEND; obj_type_tab(obj_type_tab.LAST) := bb_ptyxztqk_type(myTab(l_index).r_index, myTab(l_index).r_name, myTab(l_index).r_this, myTab(l_index).r_last, myTab(l_index).r_minus); l_index := myTab.Next(l_index); end Loop; open cur for select r_index, r_name, r_this, r_last, r_minus from table(cast(obj_type_tab AS bb_ptyxztqk_type)); end;
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster, n...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能)了解浏览器是如何工作的,能够让你站在更高的角度去理解前端浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
Java程序员都需要懂的「反射」
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射。本来没打算写反射这个知识点的,只是不少的读者都问过我:“你的知识点好像缺了反射阿。能不能补一下?” 这周末也有点空了,所以来写写我对反射的简单理解。这篇是入门文章,没有高深的知识点,希望能对新人有帮助。如果...
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问