2014年12月4日 星期四

刪除或修改暫存表格方法 (GLOBAL TEMPORARY TABLE)


新增欄位

TRUNCATE TABLE TPMPTABLE;
ALTER TABLE TPMPTABLE ADD (F1 VARCHAR2(6));

刪除表格TPMPTABLE

DROP TABLE TPMPTABLE;

刪除表格若出現以下錯誤

錯誤報告 - SQL 錯誤: ORA-14452: 嘗試建立, 更改或捨棄已在使用中之暫時表格的索引 14452. 00000 - "attempt to create, alter or drop an index on temporary table already in use" *Cause: An attempt was made to create, alter or drop an index on temporary table which is already in use. *Action: All the sessions using the session-specific temporary table have to truncate table and all the transactions using transaction specific temporary table have to end their transactions.


1.確定使用此表格的SID

SELECT SID, SERIAL# FROM V$SESSION V 
WHERE SID IN (SELECT SID FROM V$LOCK  L, DBA_OBJECTS O 
WHERE L.ID1 = O.OBJECT_ID AND O.OBJECT_NAME =UPPER('TPMPTABLE'));

2.刪除SESSION,成功後再做一次刪除表格動作(刪除SESSION的ORACLE帳號權限必須夠大)

ALTER SYSTEM KILL SESSION 'SID, SERIAL#';



2014年12月3日 星期三

Join至其他table並抓到最大的日期

取得table最大日期

SELECT K1,K2,D FROM T1
WHERE D = (SELECT MAX(D) FROM T1)

錯誤寫法:join至其他table並抓到最大的日期,此寫法會出現
ORA-01799: 資料欄不可以外部結合的方式與一個子查詢結合

SELECT K,D,D2 FROM T1 LEFT JOIN T2 ON T2.K2 = T1.K
AND T2.D2 = (SELECT MAX(D2) FROM T2)

成功寫法:join至其他table並抓到最大的日期

SELECT K,D,D2 FROM T1 LEFT JOIN 
(
  SELECT K2,D2 FROM T2 AA WHERE AA.D2 IN
   (
     SELECT MAX(D2) FROM T2
     WHERE T2.K2 = AA.K2
   )
)C ON C.K2 = T1.K

2014年11月28日 星期五

ORACLE 預存程序回傳錯誤

ORACLE 預存程序回傳錯誤

CREATE OR REPLACE PROCEDURE SPTEST(USERID IN VARCHAR2,RTN OUT VARCHAR2)
IS
  n NUMBER;
BEGIN
  n:=4/0;  
  RTN:= 'OK';
EXCEPTION
  WHEN OTHERS THEN
  RTN:= SQLERRM;
END SPTEST;

2014年10月24日 星期五

使用 FormsAuthentication.SetAuthCookie

使用FormsAuthentication.SetAuthCookie

var acct = "spring";
FormsAuthentication.SetAuthCookie(acct, false);

2014年10月22日 星期三

JavaScript Function (匿名函數)

this in C#

//直譯器載入js時,會先處理所有的宣告,包含變數與函數宣告,接下來才執行程式,因此尚未執行到匿名函數時,無法調用
//一般函數宣告方式,同一個scope的任何地方都可使用func1
func1();
function func1(){
  console.log('func1 => ' + 'type of func1 : ' + typeof func1);
}

//func2()必須在指定後才能調用,雖然是具名函數,但表示式的寫法,只會提升變數的宣告,並沒有函數的定義,所以func2()還是得像匿名函數一樣先指定才可調用   
var func2 = function func2 (){
  console.log('func2');
};
func2();

//匿名函數func3()必須在指定後才能調用 
var func3 = function(){
  console.log('func3');
};
func3();

//匿名函數,占用空間在執行完會馬上釋放
( function () { 
console.log('func4');
}()); //立即執行

//callback(回調函數)
$("#btn").click(function() {
  console.log('btn');
}); 

this在C#與JavaScript的不同

this in C#

class Program
    {
        static void Main(string[] args)
        {
            Lilo lilo = new Lilo();
            //lilo.strStitch 指向 類別Lilo的 public string strStitch;
            Console.WriteLine("{0} 是我的家人 !!", lilo.strStitch);
            Console.ReadLine();
        }
        class Lilo
        {
            public string strStitch;
            public Lilo()
            {
                string strStitch;
                strStitch = "STITCH";
                //this.strStitch 指向 public string strStitch;
                this.strStitch = strStitch;
            }
        }
    }

this in JavaScript

var lilo = {
  stitch : 'STITCH',
  f: function(){
    console.log(this.stitch + " 是我的家人 !!");
  }
};
//調用f函式後,f內的this指向點f()前面的lilo
lilo.f();

ASP.NET MVC Web API 資料庫處理 using

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Net.Http.Formatting;
using System.Data;
using MvcMusicStore.Models;
using System.Data.Entity;
using System.Configuration;
using System.Data.SqlClient;

namespace MvcMusicStore.Controllers
{
    public class ExtJSApiController : ApiController
    {     
        public dynamic ReviewDataGet(FormDataCollection form)
        {
            string conn = ConfigurationManager.ConnectionStrings["MvcMusicStoreContext"].ConnectionString;
            DataTable dt = new DataTable();
            string strCheck = form.Get("x");
            string strAlbumID = form.Get("AlbumID");
            string strTitle = form.Get("Title");
            using (SqlConnection sqlConnection = new SqlConnection(conn))
            {
                string strSql = "SELECT * FROM Albums WHERE AlbumID LIKE @AlbumID AND Title LIKE @Title";

                SqlCommand sqlCommand = new SqlCommand(strSql, sqlConnection);
                sqlCommand.Parameters.AddWithValue("@AlbumID", "%" + strAlbumID + "%");
                sqlCommand.Parameters.AddWithValue("@Title", "%" + strTitle + "%");
                sqlConnection.Open();
                dt.Load(sqlCommand.ExecuteReader());
            }
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return new ApiResponse()
            {
                success = true,
                msg = "",
                ds = ds
            };
        }
        public dynamic AlbumComboGet()
        {
            DataTable dt = new DataTable();
            using (SqlConnection sqlConnection = new SqlConnection(conn))
            {
                string strSql = "SELECT AlbumID AS 'TEXT',AlbumID AS 'VALUE' FROM Albums";
                SqlCommand sqlCommand = new SqlCommand(strSql, sqlConnection);
                sqlConnection.Open();
                dt.Load(sqlCommand.ExecuteReader());
            }
            return dt;
        }
    }
    public class ApiResponse
    {
        public DataSet ds { get; set; }
        public string msg { get; set; }
        public bool success { get; set; }
    }
}