SQL中 exec和call的使用
阿新 • • 發佈:2019-02-10
今天在讀取資料庫的時候,搞了一上午,遇到個坑,歸根結底還是術業不精! 由於對執行命令 CALL和EXEC的無知,資料庫的無知,以前學過,忘記了。
還得加強學習啊。
從開發小姐姐那兒得到的是這麼一句SQL語句(開發程式碼裡面的如下):
String spSQL = "{call DB***..balabalaTable}";
可是在之前我想開發要的時候給我的是這麼個語句:
exec DB***..balabalaTable
可能是開發好心的將call改成了exec,為了方便我在資料庫中直接查詢, 怕我不知道。於是我就懵逼了,查了半天才知道是儲存過程等等,也沒弄明白。就一直在那寫程式碼call。
最後弄明白
在資料庫裡面可以直接這樣執行CALL,但是要加{}:
也就是在資料庫中直接查詢以下是等價的:
exec DataIndex..balabalaReport
等價於
{call DataIndex..PDF_getListOfStocksForERReport}
就一句話:
exec是sqlplus的命令,只能在sqlplus(查了下 應該是 客戶端操作)中使用;
call是sql命令,任何工具都可以使用,call必須有括號,即使沒有引數 。
而寫在程式碼中是下面這樣的:
public static void getconnectionDB(String spSQL) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException { String dbURL = "jdbc:jtds:sqlserver://balabala.balabala.com:1433/balabala;balabala=balabala"; String dbUser = "UserName"; String dbPswd = "PassWord"; String dbDriver = "net.sourceforge.jtds.jdbc.Driver"; ResultSet resultSet = null; CallableStatement csStmt = null; Connection dbConn = null; System.out.println("Start connection to DB"); try { Class.forName(dbDriver).newInstance(); dbConn = DriverManager.getConnection(dbURL, dbUser, dbPswd); csStmt = dbConn.prepareCall(spSQL);//String sql="{call DB***}";sql語句需要{} csStmt.execute();//String sql="{call DB***}"; sql語句需要{} boolean result = csStmt.execute();//String sql="{call DB***}";sql語句需要{} //正常的查詢語句String sql = "SELECT ****"; //java.sql.Statement stmt = dbConn.createStatement(); //boolean result = stmt.execute(spSQL); if (result) { resultSet = csStmt.getResultSet(); java.sql.ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); while (resultSet.next()) { for (int i = 0; i < columnCount; i++) { System.out.print(rs.getString(i + 1) + "\t"); //做一些相關的操作處理 } } //做一些相關的處理 } } catch (SQLException e) { e.printStackTrace(); System.out.println("Connection to database failed"); }finally { //注意關閉SQL的順序 DbUtils.close(resultSet); DbUtils.close(csStmt); DbUtils.close(dbConn); } }
在程式碼中執行時:
call DB***語句與正常的SELECT DISTINCT *** from ***是不一樣的,正如上面程式碼中註釋的部分和下面兩行的程式碼。
我也不確定對不對,對於SQL初學,若有錯誤 感謝你能告知。謝謝。