oracle成功插入数据并commit,但是SQL查询却查不到。

oracle中成功执行了插入的语句并且commit了,但是还是在表里面无法
查询到这个插入的数据。图片说明

1个回答

好吧,我搞错了。。。。

weixin_43812483
weixin_43812483 是什么原因啊
大约 2 个月之前 回复
weixin_42712839
Demons 什么。。。
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python向oracle插入数据

我用python生成一个dataframe然后转换成list通过cursor的方法插入数据, 但是插入数据时总是报错"expect string,unicode or buffer object" 最后执行插入的代码片段如下 ``` def insert2sql(table,table_list,signal_all,parameter): signal_list=signal_all.values.tolist() conn=cx_Oracle.connect(连接串) cursor=conn.cursor() table_list=['a','b','c','d'] conn.prepare("insert into "+table+"("+table_list+") values ( %s,%s,%s...) cursor.executemany(None,signal_list) conn.commit() ``` 插入数据内有中文和空值,debug观察到signallist的中文都已经转换成成unicode编码,但仍然报错,最终数据也没有插入,不知道是哪里出问题了,有碰到过该问题的同学请回答一下,谢谢。_

mybatis事务未提交为什么能查询到insert的数据?

![图片说明](https://img-ask.csdn.net/upload/201810/31/1540975298_749408.png) 如图,insert方法插入一条数据,selALL方法查询数据,我还没有commit,仍然能查询到刚刚insert的数据 请问这其中的原理是什么?事务提交前插入的数据存放在哪?为什么能被select取到?

连接上了数据库,执行了insert动作,但是数据库没有插入的数据

脑袋疼,感觉就是执行了,没有commit。 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Oracle.ManagedDataAccess.Client; using System.Data; using System.Configuration; using System.Collections; using System.Web.Security; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using Oracle.ManagedDataAccess.Types; using Oracle.ManagedDataAccess.Client.SqlGen; using System.Windows.Forms; using System.Data.OracleClient; public partial class his_device : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { if (Panel1.Visible == true) { Button1.Text = "Show Search Panel"; Panel1.Visible = false; } else { Button1.Text = "Hide Search Panel"; Panel1.Visible = true; } } protected void btnSearch_Click(object sender, EventArgs e) { //this.HISI_DEVICE.SelectCommand="SELECT * FROM SCC_B2B.HIS_DEVICE WHERE DEVICE_NAME LIKE '" + this.TxtDevice.Text + "%'"; //this.GridView1.DataBind(); using (Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection()) { conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; string str_sql = "SELECT * FROM SCC_B2B.HIS_DEVICE"; TxtDevice.Text.Replace("'", ""); TxtDevice.Text.Replace(";", ""); if (!TxtDevice.Text.Equals("")) { str_sql = str_sql + " WHERE DEVICE_NAME LIKE '" + TxtDevice.Text + "%'"; } Oracle.ManagedDataAccess.Client.OracleDataAdapter da = new Oracle.ManagedDataAccess.Client.OracleDataAdapter(str_sql, conn); DataSet ds = new DataSet(); da.Fill(ds, "Device"); GridView1.DataSource = ds; GridView1.DataBind(); da.Dispose(); ds.Dispose(); } } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { } protected void GridView1_PageIndexChanging(object sender, EventArgs e) { } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("../Default.aspx"); } protected void btnInsert_Click1(object sender, EventArgs e) { using (Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection()) { conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(); conn.Open(); string sql = ("insert into SCC_B2B.HIS_DEVICE (device_name,device_type) values( '"+TxtDevice.Text+"','"+TxtFactory.Text+"')"); conn.Close(); if (TxtDevice.Text == "") { MessageBox.Show("Device_name cannot be null", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (TxtFactory.Text == "") { Response.Write("Device_type cannot be null"); } else { Response.Write("数据添加成功!"); } } } } protected void btnDelete_Click(object sender, EventArgs e) { using (Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection()) { Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(); conn.Open(); string sql = ("insert into SCC_B2B.HIS_DEVICE (device_name,device_type) values( '" + TxtDevice.Text + "','" + TxtFactory.Text + "')"); int ret = (int)cmd.ExecuteNonQuery(); conn.Close(); if (TxtDevice.Text == "") { MessageBox.Show("Device_name cannot be null", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (TxtFactory.Text == "") { MessageBox.Show("Device_type cannot be null", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (ret > 0) { MessageBox.Show("数据添加成功!"); } else { MessageBox.Show("数据添加失败!"); } } } } } }

使用Python3将数据导入mysql,但无法插入数据

今天想把把python3爬虫的数据存入mysql,然后通过import MySQLdb来进行数据库的操作 ``` def insert_travel(p): db = MySQLdb.connect('localhost', 'root', '799050408', 'travel') cursor = db.cursor() print(p) sql = "INSERT INTO tra_info(title, img, content) VALUES(%s,%s,%s)",(p[0],p[1],p[2]) #sql.encode('unicode') try: cursor.execute(sql) db.commit() print('success') except: db.rollback() db.close() ``` 但是数据插入不成功,通过pycharm进到excute里面看,好像在 `query = query.encode(db.unicode_literal.charset, 'surrogateescape')` `res = self._query(query)` 这 两句话里面出了问题,想请教下大神们如何解决

oracle存储过程日期变量插入报错问题

不是很明白,求大神解惑。 执行报错: ORA-00923: 未找到要求的 FROM 关键字 ORA-06512: 在 "AICHNL.LD_JUNK_TEST1", line 10 ORA-06512: 在 line 2 过程如下: create or replace procedure ld_junk_test1 is v_sql varchar2(4000); v_chkdate date; v_recdate varchar2(8); begin v_chkdate := sysdate; v_recdate := to_char(v_chkdate, 'yyyymmdd'); v_sql := 'insert into ldjunk_1013_01 select ' || v_chkdate || ',' || v_recdate || ' from dual'; execute immediate v_sql; commit; end ld_junk_test1; v_sql 值: insert into ldjunk_1013_01 select 13-10月-15,20151013 from dual

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

JDBC一个connection下多线程查询表数据会产生线程等待

案例: 从Oracle数据库将表及数据通过JDBC的方式采集到另一Oracle数据库,数据量均为千万级,从源数据库读取的时候采用ORACLE的ROWNUM分页方式,JDBC每次读取1000条,批量插入目标库,测试发现ORACLE的ROWNUM分页效率很是问题,越到后面越慢,WEBLOGIC后台甚至出现线程请求超时。 后来采用多线程的方式,创建一个连接,后台起100个线程,测试发现跟单线程的效率差不了多少,分析代码后,线程在创建preparedStatement时会产生等待,是不是创建preparedStatement时资源会互斥?搞不明白。 示例代码: ... ExecutorService threadPool = Executor.newFixedThreadPool(100); Futrue futrue = null; for(int i=0; i<=recordNum/1000;) { for(int j=0; j<100; j++) { final int m = i; futrue = threadPool.submit( new Callable() { Object[][] o = null; public void call() { //就是下面这句多线程下查询执行时间越往后越慢 o = odsDB.executeBatchQuery(tableName, MAX_BATCH_NUM*m, MAX_BATCH_NUM); if(o != null) { toDB.executeBatchInsert(insertSQL, o); toDB.commit(); } } }); i++; } } threadPool.shutdown(); while(true) { if(threadPool.Terminated()) { break; } Thread.sleep(2000); } ..... 被调用的odsDB.executeBatchQuery()方法 Object[][] o = null; PreparedStatement ps = null; ResultSet rs = null; String queryStr = null; try{ queryStr = "SELECT * FROM ( SELECT A.*, ROWNUM RN FROM " + tabName + " A WHERE ROWNUM <=? ) WHERE RN > ?"; ps = this.conn.preparedStatement(queryStr); //100条多线程下此代码执行时长越来越长。 ps.setLong(1, count+offset); ps.setLong(2, count); rs = ps.executeQuery(); } catch(Exception e) { } //下面代码将rs转成Obejct[][]返回 求各路大侠帮忙这个问题要怎么解决。

jdbcTemplate 事务控制 delete ,insert ,数据检核,最后commit 或者回滚

我的表叫A表, 1.首先delete A表内容,但不提交事务。 我用 string sql="delete from A"; tlJdbcTemplate.execute(sql); 这样会提交事务,我不想现在就提交事务应该怎么处理。 2.delete 操作完后,执行插入语句 string sql="insert into A (id,name) values('1','venture')"; jdbcTemple.update(sql); 这样会提交事务,我不想现在就提交事务应该怎么处理。 3.检验刚刚插入的数据,比如检核规则是 id不能等于1 String sql="select count(1) from A where id=1"; int jarge= tlJdbcTemplate.update(sql); if(jarge>0){ 回滚操作 回滚到delete操作之前的样子; }else{ 否则就提交刚刚的操作; } 求高手指导下怎么操作!

Statement executeBatch()批量提交效率好低 求高手答疑

数据大概一共有10W条左右,不固定, 每条sql固定格式都不太一样, 分别是对不同的表做的新增或则修改的操作 所以无法用模板?的形式操作 下面是代码 其中设置的是每1000条数据提交一次 然后这1000条数据却需要大概12S左右, 整个数据跑下来十几分钟 如果是每3000条提交一次,时间也大概是40S左右, 感觉不应该这么慢啊 数据库为Oracle.. 求高手指点一下优化方案 ```java Session session = baseDAO.getSessionFactory().openSession(); Connection conn = session.connection(); Statement stmt = null; try { conn.setAutoCommit(false); // 关闭自动提交 stmt = conn.createStatement(); for(int i=0; i<sqlList.size(); i++){ stmt.addBatch(sqlList.get(i)); //System.out.println(sqlList.get(i)); if (i % 1000 == 0 && i != 0) { long startTime = System.currentTimeMillis(); stmt.executeBatch(); conn.commit(); stmt.clearBatch(); System.out.println("executeBatch 执行使用了 :"+(System.currentTimeMillis() - startTime )/1000 + " 秒"); } } // 执行批处理语句 stmt.executeBatch(); // 执行剩下的不到1000条的数据 conn.commit(); conn.setAutoCommit(true);//在把自动提交打开 } catch (SQLException he) { he.printStackTrace(); try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException sqlex) { System.err.println(this.getClass().getName() + ".mymethod - 不能关闭数据库连接: " + sqlex.toString()); } } if (conn != null) { try { conn.close(); } catch (SQLException sqlex) { System.err.println(this.getClass().getName() + ".mymethod - 不能关闭数据库连接: " + sqlex.toString()); } } session.close(); } ```

事务提交过程,出现异常,但是回滚事务失败,这是什么原因

/** *实现事务:Tom 对Jerry 转账500元 * */ public class TransactionTest { public static void update(Connection conn,String sql,Object ... args){ PreparedStatement pstmt = null; try{ pstmt = conn.prepareStatement(sql);//通过SQL语句 创建PreparedStatement 对象。 //利用 for 循环对 SQL 语句中的 PreparedStatement 占位符 ,更新数据。 for(int i = 0;i < args.length;i++){ pstmt.setObject((i+1), args[i]); } //更新执行。 pstmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ //关闭数据库连接。 JDBCTools.release(null, pstmt, null); } } public static void main(String[] args) { Connection conn = null; try{ conn = JDBCTools.getConnection(); //取消默认的提交方式 conn.setAutoCommit(false); String sql = "UPDATE user SET balance = balance - 500 WHERE id = 2000001"; update(conn, sql); /*此处会 报com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException,Table 'ming.users' doesn't exist 但是,整个事务却没有回滚。*/ sql = "UPDATE users SET balance = balance + 500 WHERE id = 2000002"; update(conn,sql); //若事务操作正常,则提交事务 conn.commit(); } catch(Exception e){ //若事务操作出现异常,则需要在异常处理中回滚事务 try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally{ JDBCTools.release(null, null, conn); } } }

oracle,表判断是否存在,不存在则先创建表,再执行语句,存在则执行语句

create or replace procedure proc_dept_monthhours as v_sql varchar2(20000):=''; v_flag number(10,0):=0; begin select count(*) into v_flag from user_TABLES where table_name='HO_DEPT_MONTHHOURS'; if v_flag>0 then begin insert into test_dept_monthhours(yearmonth,branch,subtotal) select yearmonth,branch,sum(dm)+sum(sm)+sum(smt)+sum(sup)+sum(ltnc) from ehruser.HO_DEPT_MONTHHOURS@traininglink group by branch,yearmonth; else v_sql='create table HO_DEPT_MONTHHOURS ( yearmonth VARCHAR2(7), branch NVARCHAR2(200), subtotal NUMBER ) '; v_sql='create unique index TRDHR.HO_DEPT_MONTHHOURS_BRANCH on HO_DEPT_MONTHHOURS (BRANCH) tablespace TRAINING_DATA pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited )'; v_sql='tablespace TRAINING_DATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited )'; execute immediate v_sql; insert into test_dept_monthhours(yearmonth,branch,subtotal) select yearmonth,branch,sum(dm)+sum(sm)+sum(smt)+sum(sup)+sum(ltnc) from ehruser.HO_DEPT_MONTHHOURS@traininglink group by branch,yearmonth; end; end if; commit; end proc_dept_monthhours;为什么这个存储过程建好打叉???哪错了??

存储过程,插入表时是否可以同时从游标和另一张表取数据? 已添加自己写的在下面。

W表为基础表 M表为报表层表,两张表字段几乎一样,只有两列代理键,TIME_WID 和COMPANY_WID 要关联另外两张表,日期维表和 公司维表,可根据W表的机构和时间检索出日期和公司的代码, 现在存储过程要实现的功能就是W层的表到M层表的同步,再转下代理键 就Ok 起初我想把机构和公司设为参数,写进游标,再从游标取值 人两个参数,再同W表的其他参数插入到M表 但不清楚如何 把游标的参数 和W表的字段同时插入进M表里? 由于之前没有写存储过程的经验,这次上面要求的又挺急,请各位帮忙解决这个问题, 多谢,多谢!! CREATE OR REPLACE PROCEDURE TP_EXAM IS I_SJ NUMBER; I_JG NUMBER; V_SDATE NUMBER; V_UPDA NUMBER; --DELETE FROM RPT_YW_YB10_INTER_INSUR_RANK_F WHERE COMPANY_WID = '111'; TYPE Cursors IS REF CURSOR; c_CUR Cursors; OPEN c_CUR FOR SELECT TIME_WID, COMPANY_WID FROM DW_YW_YB10_INTER_INSUR_RANK_F RF LEFT JOIN W_COMPANY_D COMY ON (RF.JG = COMY.COMPANY_CODE) LEFT JOIN W_TIME_D T ON (RF.SJ = T.DAY_DT); --取出时间和机构的代理键 LOOP FETCH c_CUR INTO I_SJ, I_JG, BEGIN INSERT INTO RPT_YW_YB10_INTER_INSUR_RANK_F VALUES (I_SJ,I_JG); SELECT (index_name, ditch_name, insurance_name, period, ytd_value, batch_id, created_by, updated_by, combination_record, src_sys, etld_at) INTO RPT_YW_YB10_INTER_INSUR_RANK_F FROM DW_YW_YB10_INTER_INSUR_RANK_F WHERE updated_at = V_UPDA -1; EXIT WHEN c_CUR%NOTFOUND; END LOOP; CLOSE c_CUR; SELECT SYSDATE INTO V_SDATE FROM DUAL; SELECT updated_at INTO V_UPDA; n:=1; WHILE INSERT INTO RPT_YW_YB10_INTER_INSUR_RANK_F SELECT * FROM RPT_YW_YB10_INTER_INSUR_RANK_F where rownum between n and n+1000; if Sql%Rowcount <1000 then commit; break; end if; n:=n+1000; COMMIT; END;

MyBatis与Oracle连接问题

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection ### Cause: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185) at org.fkit.test.MyBatisTest.main(MyBatisTest.java:23) Caused by: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:189) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:345) at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:428) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:515) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:345) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:201) at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:196) at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:93) at org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:385) at org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:89) at org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:138) at org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:60) at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:336) at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:84) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198) ... 2 more ```mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- XML 配置文件包含对 MyBatis 系统的核心设置 --> <configuration> <!-- 指定 MyBatis 所用日志的具体实现 --> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <environments default="development"> <!-- 环境配置,即连接的数据库。 --> <environment id="development"> <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 --> <transactionManager type="JDBC"/> <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 --> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@192.168.*.*:1521:orcl"/> <property name="username" value="sm"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 --> <mappers> <mapper resource="org/fkit/mapper/UserMapper.xml"/> </mappers> </configuration> UserMapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace指用户自定义的命名空间。 --> <mapper namespace="org.fkit.mapper.UserMapper"> <!-- id="save"是唯一的标示符 parameterType属性指明插入时使用的参数类型 useGeneratedKeys="true"表示使用数据库的自动增长策略 --> <insert id="save" parameterType="org.fkit.domain.User" > INSERT INTO TB_USER(name,sex,age) VALUES(#{name},#{sex},#{age}) </insert> </mapper> User.java public class User implements Serializable{ // 用户标识 private Integer id; // 用户姓名 private String name; // 用户性别 private String sex; // 用户年龄 private Integer age; // 无参数构造器 public User() { super(); } // 有参数构造器 public User( String name, String sex, Integer age) { super(); this.name = name; this.sex = sex; this.age = age; } // setter和getter方法 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } } MyBatisTest.java public class MyBatisTest { public static void main(String[] args) throws Exception { // 读取mybatis-config.xml文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 初始化mybatis,创建SqlSessionFactory类的实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 创建Session实例 SqlSession session = sqlSessionFactory.openSession(); // 创建User对象 User user = new User("admin", "男", 26); // 插入数据 session.insert("org.fkit.mapper.UserMapper.save", user); // 提交事务 session.commit(); // 关闭Session session.close(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201709/18/1505748486_87603.png)

Java读取文本数据存到数据库,在方法执行完成后为啥所占用的内存资源没释放?

大致步骤是读取一个包含十六万+行的文档数据,并将数据存放到数据库,但是在该方法执行完成后所占用的内存资源没有被释放,求大神指教~ (这程序是用swing开发的桌面程序,不知是不是跟用了swing有关) 以下代码是核心部分: ``` String sql = "insert into "+tableName+"("+imuField+") values(?,?,?,?,?,?,?,?,?)"; Connection c = JDBCUtil.getConnection(); // 获取数据库连接 try { Statement statement=c.createStatement(); statement.executeUpdate(createTable); // 创建表 System.err.println(tableName+"表创建成功,准备写入数据..."); c.setAutoCommit(false); // 手动提交 PreparedStatement ps= c.prepareStatement(sql); File imuFile= new File(file); List<String> strList=FileIUtils.readLine(imuFile,"utf-8", index, offset); // 读取文件内容 if(strList==null || strList.size()<1) { SwingUtils.warn(jf, null, "选择的文件不存在IMU数据"); } Integer n=0; Integer not=0; Integer i= 0; StringBuilder utcTime = new StringBuilder(); String[] strs = new String[1024]; long begin = System.currentTimeMillis(); // 记录开始时间 jProgressBar.setMaximum(strList.size()); // 加载进度条 for(String strLin: strList) { n++; i++; jProgressBar.setValue(n); // 加载进度条 strs = strLin.split("\t"); if(strs[0]!=null && Utils.isContainNumber(strs[0]) && strs[1]!=null && Utils.isContainNumber(strs[1]) && strs[2]!=null && Utils.isContainNumber(strs[2]) && strs[3]!=null && Utils.isContainNumber(strs[3]) && strs[4]!=null && Utils.isContainNumber(strs[4]) && strs[5]!=null && Utils.isContainNumber(strs[5]) && strs[6]!=null && Utils.isContainNumber(strs[6]) && strs[7]!=null && Utils.isContainNumber(strs[7]) && strs[8]!=null && Utils.isContainNumber(strs[8])) { Date GpsDate = Utils.StringToDate(strs[1]+" "+strs[0]); // GPS时间处理(0,1元素拼接起来为GPS时间) ps.setDate(1,new java.sql.Date(GpsDate.getTime())); ps.setLong(2, GpsDate.getTime()); ps.setString(3, strs[2]); ps.setString(4, strs[3]); ps.setString(5,strs[4]); ps.setString(6, strs[5]); ps.setString(7, strs[6]); ps.setString(8, strs[7]); utcTime.setLength(0); utcTime.append(strs[1]).append(" "+strs[8]); ps.setString(9, utcTime.toString()); ps.addBatch(); if(i>=100000) { // 累计到十万条时执行SQL i=0; ps.executeBatch(); c.commit(); } }else { not++; continue; } } if(ps!=null) { ps.executeBatch(); ps.close(); c.commit(); } System.out.println("插入完成,耗时约 "+(System.currentTimeMillis()-begin)/1000+" 秒"); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtil.closeConnection(c); // 回收连接 } ``` 以下是程序启动时内存占用情况: ![程序启动时](https://img-ask.csdn.net/upload/201811/27/1543303587_698231.png) 以下是程序执行SQL方法时内存的占用情况: ![运行中](https://img-ask.csdn.net/upload/201811/27/1543303605_900371.png) 以下是该方法执行完成后内存占用情况(与运行中差不多,或更高): ![完成后](https://img-ask.csdn.net/upload/201811/27/1543303622_903827.png)

oracle 如何调用package中的存储过程输出打印目录

手上有段前任写的输出总账账本目录的部分脚本,如下,如何调用这段脚本,实现输出呢? --1、创建包sp_slzb,结果输出到result_bb /*创建包头*/ create or replace package sp_slzb is type outlist is ref cursor; procedure sp_sl01 (set_year in varchar2, st_code in varchar2, ele_level in varchar2, --要素使用'#'连接,后面使用()说明级次,如#en(1-3)#bs(1-*)#hold11(2-2)# per_print number, --每页打印行数 result_bb out outlist ); end sp_slzb; /*创建包体*/ create or replace package body sp_slzb is procedure sp_sl01( set_year in varchar2, st_code in varchar2, ele_level in varchar2, --要素使用'#'连接,后面使用()说明级次,*代表底级(PS:只要底级写*-*),如#en(1-3)#bs(1-*)#hold11(2-2)# per_print number, --每页打印行数 result_bb out outlist ) is v_sql varchar2(4000); v_sql0 long; v_sql1 long; v_sql2 long; v_sql3 varchar2(4000); v_sql4 varchar2(4000); v_sql5 varchar2(4000); v_sql6 varchar2(4000); v_sql7 varchar2(4000); v_sql8 varchar2(4000); v_sql9 varchar2(4000); cs number; cs1 number; sum_jcws number; yscs number; ele_1 varchar2(100); ele_2 varchar2(100); min_lev varchar2(10); max_lev varchar2(10); lev1 number; ele_bb varchar2(40); jl varchar2(3); ml_sql0 varchar2(4000); ml_sql1 varchar2(4000); ml_sql2 varchar2(4000); ml_sql3 varchar2(4000); ml_sql4 long; ml_sql5 long; ml_sql6 long; ml_sql7 long; ml_sql8 long; ml_sql9 long; begin /*首先,拼接出完整的三栏明细账(PS:只打底级)插入物理表SLNR01*/ --判断写入参数中的要素个数 select length(ele_level)-length(replace(ele_level, '#', '')) into cs from dual; commit; --循环截取单个要素并开始拼接 cs1 := 1; loop select substr(ele_level, instr(ele_level, '#', 1, cs1) + 1, instr(ele_level, '#', 1, cs1 + 1) - instr(ele_level, '#', 1, cs1) - 1) into ele_1 from dual; select substr(ele_1,1,instr(ele_1,'(',1)-1) into ele_2 from dual; --获取单个要素的数据源表 select distinct t.ele_source into ele_bb from sys_element t where t.ele_code=ele_2 and t.set_year=set_year; --截取出单个要素的最低级次 select substr(ele_1,instr(ele_1,'(',1)+1,instr(ele_1,'-',1)-instr(ele_1,'(',1)-1) into min_lev from dual; if min_lev='*' then v_sql:='select max(t3.level_num) from gl_voucher_detail t1,gl_voucher t2,'||ele_bb||' t3 where exists (select 1 from ele_book_set p where p.chr_id=t2.st_id and p.chr_code='''||st_code||''' and t2.set_year='||set_year||') and t1.voucher_id=t2.voucher_id and t3.chr_id='||ele_2||'_id'; execute immediate v_sql into min_lev; if min_lev is null then min_lev:=1; else min_lev:=min_lev; end if; else min_lev:=min_lev; end if; --截取出单个要素的最高级次 select substr(ele_1,instr(ele_1,'-',1)+1,instr(ele_1,')',1)-instr(ele_1,'-',1)-1) into max_lev from dual; if max_lev='*' then v_sql:='select max(t3.level_num) from gl_voucher_detail t1,gl_voucher t2,'||ele_bb||' t3 where exists (select 1 from ele_book_set p where p.chr_id=t2.st_id and p.chr_code='''||st_code||''' and t2.set_year='||set_year||') and t1.voucher_id=t2.voucher_id and t3.chr_id='||ele_2||'_id'; execute immediate v_sql into max_lev; if max_lev is null then max_lev:=1; else max_lev:=max_lev; end if; else max_lev:=max_lev; end if; sum_jcws:=0; --根据获取到的最低和最高要素级次loop循环处理拼接 lev1:=min_lev; loop v_sql0:=v_sql0||'(select p1.chr_code from '||ele_bb||' p,'||ele_bb||' p1 where t1.'||ele_2||'_id=p.chr_id and p.set_year=p1.set_year and p1.chr_id=p.chr_id'||lev1||' and p1.level_num='||lev1||' ) as ' ||ele_2||'_code'||lev1||',(select p1.chr_name from '||ele_bb||' p,'||ele_bb||' p1 where t1.'||ele_2||'_id=p.chr_id and p.set_year=p1.set_year and p1.chr_id=p.chr_id'||lev1||' and p1.level_num='||lev1||' ) as ' ||ele_2||'_name'||lev1||','; v_sql3:=v_sql3||ele_2||'_code'||lev1||','||ele_2||'_name'||lev1||','; v_sql:='select max(length(chr_code)) from '||ele_bb||' where set_year='||set_year||' and level_num='||lev1; execute immediate v_sql into sum_jcws; ml_sql0:=ml_sql0||'nvl('||ele_2||'_code'||lev1||',lpad('' '','''||to_number(sum_jcws+1)||''',''*'')) as '||ele_2||'_code'||lev1||','||ele_2||'_name'||lev1||','; ml_sql8:=ml_sql8||ele_2||'_code'||lev1||','; yscs:=length(ml_sql8)-length(replace(ml_sql8, ',', '')); yscs:=yscs+1; ml_sql4:=ml_sql4||yscs||',lpad('' '','||yscs||')||' ||ele_2||'_code'||lev1||','; ml_sql5:=ml_sql5||'grouping('||ele_2||'_code'||lev1||')+'; ml_sql6:=ml_sql6||'nvl('||ele_2||'_code'||lev1||',''*'') as '||ele_2||'_code'||lev1||','; ml_sql7:=ml_sql7||ele_2||'_code'||lev1||'||'' ''||'||ele_2||'_name'||lev1||' as '||ele_2||'_code'||lev1||','; lev1:=lev1+1; exit when lev1>max_lev; end loop; cs1 := cs1 + 1; exit when cs1=cs; end loop; --生成本年发生数明细 v_sql1:=' select as_code,as_name,'||v_sql0|| 'substr(t.vou_date,6,2) as yf, substr(t.vou_date,9,2) as rq, to_char(t.voucher_no) as voucher_no, t1.main_line, t1.summary, deb_money as jfje, cre_money as dfje, deb_money-cre_money as fsje, ''1'' as bz from gl_voucher t, gl_voucher_detail t1 where t.set_year = '||set_year||' and t.voucher_id = t1.voucher_id and exists (select 1 from ele_book_set p where p.chr_id = t.st_id and p.chr_code = '''||st_code||''') union all'; --叠加期初数明细行 v_sql2:='(select as_code, as_name, '||v_sql0|| '''0'' as yf, ''0'' as rq, ''0'' as voucher_no, ''0'' as main_line, ''期初余额'' as summary, 0 as jfje, 0 as dfje, decode(substr(as_code,1,1),2,-nvl(balance,0),nvl(balance,0)) as fsje, ''0'' as bz from gl_remain t1 where t1.set_year = '||set_year|| ' and exists (select 1 from ele_book_set p where p.chr_id = t1.st_id and p.chr_code = '''||st_code||''')'; --明细行开头一段 v_sql4:='with bb01 as (select AS_CODE,AS_NAME,'||v_sql3 ||'bz,YF,RQ,VOUCHER_NO,main_line,SUMMARY,sum(jfje) as jfje, sum(dfje) as dfje,sum(fsje) as fsje from ('; --明细行后续一段 v_sql5:=')) group by AS_CODE, AS_NAME,'||v_sql3||'YF, RQ, VOUCHER_NO, main_line, SUMMARY, bz),'; --汇总生成每月合计行 v_sql6:=' bb02 as (select AS_CODE, as_name,'||v_sql3||'''2'' as bz, yf,(case when yf in (''01'',''03'',''05'',''07'',''08'',''10'',''12'') then ''31'' when yf in ''02'' then ''28'' else ''30'' end) as rq, '''' AS voucher_no, '''' as main_line, ''本月合计'' as summary,sum(jfje) as jfje,sum(dfje) as dfje,sum(fsje) as fsje from bb01 where bz=''1'' group by AS_CODE, as_name,'||v_sql3||'yf),'; v_sql7:=' bb03 as (select AS_CODE, as_name,'||v_sql3||'''1'' as bz,yf,rq,voucher_no, summary, main_Line, jfje, dfje, sum(fsje) over(partition by AS_CODE,AS_NAME,'||v_sql3||'''1'' order by yf,bz,rq,voucher_No,main_Line,summary) as fsje from bb01),'; --汇总生成每月全年累计行 v_sql8:=' bb04 as (select AS_CODE,AS_NAME,'||v_sql3||'''4'' as bz,yf,rq,voucher_no,main_line,summary,jfje,dfje,fsje from (select AS_CODE,AS_NAME,'||v_sql3||'bz, yf,rq, voucher_no, main_line, ''本年累计'' as summary, sum(jfje) over(partition by AS_CODE,AS_NAME,'||v_sql3||'''1'' order by yf) as jfje, sum(dfje) over(partition by AS_CODE,AS_NAME,'||v_sql3||'''1'' order by yf) as dfje, sum(fsje) over(partition by AS_CODE,AS_NAME,'||v_sql3||'''1'' order by yf) as fsje from (select * from bb01 where bz=''0'' union all select * from bb02)) where bz<>''0'')'; --拼接组合年初数,发生数明细,月合计行,月累计行 v_sql9:=' select AS_CODE,AS_NAME,'||v_sql3 ||'BZ,YF,RQ,VOUCHER_NO,SUMMARY,MAIN_LINE,JFJE,DFJE,FSJE from (select * from bb03 union all select * from bb02 union all select * from bb04) order by AS_CODE,AS_NAME,'||v_sql3||'yf,bz,rq,voucher_no,main_line,summary'; --将生成的三栏明细账插入物理表slnr01(如果已存在,则直接删除表,否则重新创建) select count(1) into jl from user_tables t where t.table_name='SLNR01'; if jl=0 then execute immediate 'create table slnr01 as '||v_sql4||v_sql1||v_sql2||v_sql5||v_sql6||v_sql7||v_sql8||v_sql9; commit; else execute immediate 'drop table slnr01'; execute immediate 'create table slnr01 as '||v_sql4||v_sql1||v_sql2||v_sql5||v_sql6||v_sql7||v_sql8||v_sql9; end if; /********以下开始生成目录,并将生成的目录插入物理表SLML01********/ --计算叶节点的页数(PS:补空页) ml_sql1:='with bb01 as (select AS_CODE,AS_NAME,'||ml_sql0|| '(case when mod(ceil(count(1)/'||per_print||'),2)=1 then ceil(count(1)/38)+1 else ceil(count(1)/38) end) as hs from slnr01 group by AS_CODE,AS_NAME,'||v_sql3||'''1''),'; --计算叶节点对应的累计页数 ml_sql2:=' bb02 as (select dense_rank() over(order by AS_CODE,AS_NAME,'||v_sql3||'''1'') as bh, AS_CODE,AS_NAME,'||v_sql3||'sum(hs) over(order by AS_CODE,AS_NAME,'||v_sql3||'''1'') as hs from bb01),'; --错位相拼计算出子节点起始页码 ml_sql3:=' bb03 as (select t1.AS_CODE,t1.AS_NAME,'||v_sql3||'1 as ym from bb02 t1 where t1.bh=''1'' union all select t1.AS_CODE,t1.AS_NAME,'||v_sql3||'t2.hs+1 as ym from bb02 t1,(select bh,hs from bb02) t2 where t1.bh=t2.bh+1) '; --逐级计算显示起始页码 ml_sql9:=' select * from (select decode(jc1,1,as_code,'||ml_sql4||'''#'') as km,ym from (select dense_rank() over(partition by as_code order by jc desc) as jc1,p.* from ( select grouping(as_code)+'||ml_sql5||'+0 as jc,nvl(as_code, ''#'') as as_code,' ||ml_sql6||'min(ym) as ym from (select as_code||'' ''||as_name as as_code,' ||ml_sql7||'ym from bb03 ) t group by rollup(as_code,'||ml_sql8||'1) ) p order by as_code,'||ml_sql8||'1) ) where km not like ''#%'' and km not like ''%*%'' and trim(km) is not null'; /*dbms_output.put_line(ml_sql1); dbms_output.put_line(ml_sql2); dbms_output.put_line(ml_sql3); dbms_output.put_line(ml_sql9);*/ open result_bb for ml_sql1||ml_sql2||ml_sql3||ml_sql9; end; end sp_slzb; --2、打印内容输出到slnr01物理表中,目录输出到游标参数result_bb中

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) 工号

【求教】使用pycharm编写python爬虫,连接不上本地MySQL服务器

#小白自学修炼中,在编写python爬虫时,需要连接上本地MySQL服务器,将爬取的内容存放。 求教问题描述>>> 问题: #pycharm编写的程序连接不上本地MySQL服务 ### 环境: * python3.6 * ide:pycharm * 本地mysql服务已开启。 mysql版本:5.7 ## 源代码: ``` # 导入开发包 from bs4 import BeautifulSoup as bs from urllib.request import urlopen import re import pymysql # 获得数据库的连接 connection = pymysql.connect( host='localhost', user='root', password='123456', db='baidu', charset='utf8mb4' ) try: # 获得会话指针 with connection.cursor() as cursor: # 创建sql语句 sql = "insert into urls ('urlname','urlhref') values (%s,%s)" # 向baiduurls表提交操作 cursor.execute(sql, ("1", "1")) # 提交操作 connection.commit() finally: connection.close() ``` ## ## 出现的问题 ``` Traceback (most recent call last): File "C:/Pycharm/pro_2020/百度百科爬虫/craw_url.py", line 12, in <module> db='baidu' raise exc pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (timed out)") ``` 无法连接本地mysql数据库,另外数据库我在第三方工具上创建了一个名为“baidu”的数据库;我在命令行下查询了,确实创建着有。只是在pycharm里连接不到本地MySQL。 ## 尝试过、并失败了的的方法 ``` 防火墙已关闭,依然连接失败; net start mysql MySQL服务器doc命令行尝试连接,依然连接失败; host = 127.0.0.1,依然连接失败; ``` 真心在线求各位老哥老姐教教弟弟,不胜感激!

关于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>

为后台执行加载数据 可以加载到临时表 却不能加载到表区间(调用存储过程)

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; 求大神帮忙看下问题出在哪?为什么不能自动调用存储过程

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java校招入职华为,半年后我跑路了

何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

@程序员:GitHub这个项目快薅羊毛

今天下午在朋友圈看到很多人都在发github的羊毛,一时没明白是怎么回事。 后来上百度搜索了一下,原来真有这回事,毕竟资源主义的羊毛不少啊,1000刀刷爆了朋友圈!不知道你们的朋友圈有没有看到类似的消息。 这到底是啥情况? 微软开发者平台GitHub 的一个区块链项目 Handshake ,搞了一个招募新会员的活动,面向GitHub 上前 25万名开发者派送 4,246.99 HNS币,大约价...

再不跳槽,应届毕业生拿的都比我多了!

跳槽几乎是每个人职业生涯的一部分,很多HR说“三年两跳”已经是一个跳槽频繁与否的阈值了,可为什么市面上有很多程序员不到一年就跳槽呢?他们不担心影响履历吗? PayScale之前发布的**《员工最短任期公司排行榜》中,两家码农大厂Amazon和Google**,以1年和1.1年的员工任期中位数分列第二、第四名。 PayScale:员工最短任期公司排行榜 意外的是,任期中位数极小的这两家公司,薪资...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

立即提问
相关内容推荐